flink 源代码启动
Flink源码编译启动
背景
纯小白新手入门flink,由于自身基础差底子薄,启动个源码各种查资料找资源,终于启动好了 值得记录一下,本文源码启动是基于idea+jdk8+maven在windows上启动flink1.16源码。
(1)下载源码
源码地址:https://github.com/apache/flink/tree/release-1.16
(2)项目编译
首先在idea中打开命令终端Terminal,然后进行编译
在flink目录中执行:
mvn clean install -DskipTests -Dmaven.javadoc.skip=false -T 1C
进入flink-dist目录(cd flink-dist)执行:
mvn install -DskipTests
这个过程较慢,需要耐心等一会。。。
如果在此过程中报错:Too many files with unapproved license, 需要加入-Drat.skip=true 跳过许可证发行检查。
检验是否成功:进入flink-dist目录查看target文件下是否有flink-1.16-SNAPSHOT-bin文件夹(启动配置时需要用),如下图:
(3) 启动StandaloneSessionClusterEntrypoint
a.基础配置:
在flink-runtime模块下的StandaloneSessionClusterEntrypoint类中,不修改直接启动会报错。
这是一个help信息,要求我们用-c参数输入一个配置文件所在目录。
这个配置文件目录就是flink编译后的conf目录。即:flink-dist模块下target文件下(上第一步编译后的target文件),所以我们在idea的application执行界面的program arguments中填入编译后的conf目录:
-c E:\myStudy\flink1.16\flink-dist\target\flink-1.16-SNAPSHOT-bin\flink-1.16-SNAPSHOT\conf
#注意:-c 是固定格式,后面的路径是项目本身的target文件下的具体地址,需要根据自己项目动态调整
b.主类缺失:
这时候再次点击main方法启动时,还是报错:Exception in thread "main" java.lang.NullPointerException,
所以我们需要依赖其他的jar包,即:在IDEA的File -> project structure->Modules中给flink-runtime-添加依赖,依赖jar包来源于flink-dist模块下target文件下(上第一步编译后的target文件)下\flink-1.16-SNAPSHOT-bin\flink-1.16-SNAPSHOT\lib目录下的所有jar包都添加进去。
c.启动:
重新启动该类的main方法,就启动起来了,可以打开localhost:8081可以出现flink界面。
d.日志配置:
能够启动项目了但是无法看到日志,需要在jvm启动命令中指定log4j配置文件。
-Dlog4j.configurationFile=file:/E:/myStudy/flink1.16/flink-dist/target/flink-1.16-SNAPSHOT-bin/flink-1.16-SNAPSHOT/conf/log4j-console.properties
#注意:-Dlog4j.configurationFile=file: 是固定格式,后面的路径是项目本身的target文件下的具体地址,需要根据自己项目动态调整
在log4j-console.properties文件中,日志目录被配置为$sys:log.file$,即从系统环境变量中取log.file,如果没有配置的话仍然会无法显示日志或者报错,所以需要提前配置好。
我这边不打算采用系统环境变量的方式,而是用自定义的环境变量log.file=target/log/flink.log,并把log4j-console.properties中的$sys:log.file$都改成$env:log.file$,这样的好处是可以把JobManager和TaskManager的日志分开。
(4) 启动TaskManagerRunner
同StandaloneSessionClusterEntrypoint类启动大体一致,都需要配置a,b两步,但是由于b步在StandaloneSessionClusterEntrypoint中已经配置过,所以在此不用再次配置,只需要配置步骤a。
a.基础配置:
在idea的application执行界面的program arguments中填入编译后的conf目录,同StandaloneSessionClusterEntrypoint类中配置相同,可直接拷贝过来。
b.创建临时目录:
启动时会创建一个临时目录,这个目录的名字格式是:tm_localhost:63324-413063,其中冒号在windows里是不被允许的,所以需要修改TaskManagerRunner类中getTaskManagerResourceID()方法,把ip和端口的连接符号从冒号改成下划线,如下图:
c.配置项添加
进入flink-dist模块下找target文件,找到flink-1.16-SNAPSHOT-bin下的conf配置文件夹下的flink-conf.yaml文件(即路径为:flink-dist\target\flink-1.16-SNAPSHOT-bin\flink-1.16-SNAPSHOT\conf\flink-conf.yaml),进行配置文件的修改:
## ================== 单独启动时添加 ===================
taskmanager.cpu.cores: 2
taskmanager.memory.task.heap.size: 750mb
taskmanager.memory.task.off-heap.size: 0mb
taskmanager.memory.managed.size: 2048mb
taskmanager.memory.network.min: 128mb
taskmanager.memory.network.max: 128mb
taskmanager.memory.framework.heap.size: 128mb
taskmanager.memory.framework.off-heap.size: 128mb
taskmanager.log.path: target/log/jobmanager/flink.log
# jvm
taskmanager.memory.jvm-metaspace.size: 256mb
taskmanager.memory.jvm-overhead.max: 256mb
taskmanager.memory.jvm-overhead.min: 256mb
## ==================================================
其中taskmanager.log.path是task的日志文件,根据自己项目情况动态调整。
d.启动:
刷新localhost:8081界面,Taskmaanger启动成功后会自动注册到JobManager,所以在flink界面能够看到TaskManager的数量从0变成了1。
e.日志配置
同同StandaloneSessionClusterEntrypoint类的日志配置相同。
结束
至此,flink源码启动完成,如有错误之处,还望各位大佬体谅与指教!
原文链接:https://blog.csdn.net/weixin_44733185/article/details/89345572
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)