Flink源码编译与运行

发布于:2025-02-10 ⋅ 阅读:(100) ⋅ 点赞:(0)

1 准备

准备好Java 8环境和编译器(如IDEA)。
下载源码:

2 编译

在IDEA终端,使用下面命令之一编译源码:

  • 安装:mvn clean install -DskipTests -Dfast
  • 打包:mvn clean package -DskipTests -Dfast

在这里插入图片描述

注意命令运行所在路径必须是工程根目录。

3 运行

3.1 运行JobManager

需要运行:org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint
设置VM选项为:

-Dlog4j.configuration=E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\conf\log4j-console.properties  
-classpath E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\lib\*

记得修改为你的路径。
设置程序实参为:

--configDir E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\conf
> E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\log\job-log.out 2>&1

在这里插入图片描述

3.2 运行TaskManager

需要运行:org.apache.flink.runtime.taskexecutor.TaskManagerRunner
设置VM选项为:

-Dlog4j.configuration=E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\conf\log4j-console.properties  
-classpath E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\lib\*

设置程序实参为:

--configDir E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\conf
> E:\Study\SourceCode\flink-1.18.0\flink-dist\target\flink-1.18.0-bin\flink-1.18.0\log\task-log.out 2>&1

在这里插入图片描述

4 问题

4.1 问题1

编译过程中,有的依赖无法自动下载。
解决:
可以去Maven仓库下载,然后使用下面的命令手动安装:

mvn install:install-file -Dfile=【jar包的完整路径】 -DgroupId=【依赖的GroupId】 -DartifactId=【依赖的ArtifactId】 -Dversion=【依赖的Version】 -Dpackaging=【依赖的Packaging类型】

如:

mvn install:install-file -Dfile=E:\Users\30411\Downloads\typescript-3.7.2.jar -DgroupId=org.webjars.npm -DartifactId=typescript -Dversion=3.7.2 -Dpackaging=jar

4.2 问题2

Cannot read properties of null (reading 'pickAlgorithm')
解决:
npm cache clear --force

4.3 问题3

jobManager启动直接退出。
解决:
使用netstat -ano查看端口号是否占用。

4.4 问题4

taskManager启动直接退出。
解决:
可能是创建临时目录出现问题。
默认创建临时目录中包含“:”,而windows不允许出现“:”。可以将org.apache.flink.runtime.entrypoint.ClusterEntrypointUtils#generateTaskManagerWorkingDirectoryFile"tm_" + resourceId改为"tm_" + resourceId.toString().replace(":", "+")
记得重新编译。