1 准备
准备好Java 8环境和编译器(如IDEA)。
下载源码:
- 官网:https://flink.apache.org/downloads/。
- GitHub:https://github.com/apache/flink。
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(":", "+")
。
记得重新编译。