Flink源码阅读(一)源码环境搭建

一  引言

         Flink源码本身比较复杂,我打算以Flink的Standalone模式为入口,研究当一个jar包被提交进Flink后,flink如何处理的过程。

二  环境搭建

         搭建过程可以参考官方文档

         https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/deployment/cluster_setup.htm

         启动  JobManager:         bin/jobmanager.sh start

         启动 TaskManager:        bin/taskmanager.sh start

         主要关注上面两个脚本,通过阅读脚本,可以知道底层调用的是 flink-daemon.sh,点进去可以发现,主要是下面几个类

Flink源码阅读(一)源码环境搭建_第1张图片

如果shell脚本扎实,可以阅读shell脚本,明确知道红圈圈是两个入口类,但如果像我一样,对shell脚本一知半解,可以在启动集群后,使用jps命令Flink源码阅读(一)源码环境搭建_第2张图片也能定位到入口类。

三 源码环境搭建

         知道入口类后,可以抛弃flink提供的二进制发行包,考虑在eclipse中debug启动集群。我使用的版本是 flink1.7.2

         导入Flink源代码

                 参照官方文档的教程,官网推荐使用idea,所以改用idea导入,maven使用 3.2版本的,没有修改maven的配置

                 idea下载地址(2016.2.5):http://www.jetbrains.com/idea/download/previous.html

                 官方教程: https://ci.apache.org/projects/flink/flink-docs-release-1.8/flinkDev/ide_setup.html

                 耐心挂一个晚上,可以下载好所有的jar包。

          碰到的一些问题

                 问题1:

                 如果直接启动JobManager,会报错,

org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
usage: StandaloneSessionClusterEntrypoint -c  [-D
       ] [-h ] [-r ] [-x ]
     -c,--configDir    Directory which contains the
                                                configuration file
                                                flink-conf.yml.
     -D                         use value for given property
     -h,--host                        Hostname for the RPC service.
     -r,--webui-port                 Port for the rest endpoint and
                                                the web UI.
     -x,--executionMode         Deprecated option

         可以联想到shell脚本中并不是直接运行main方法的,还带有一些参数,在shell脚本中增加echo输出,可以得到JobManager和TaskManager的完整启动脚本。

TaskManager

 /home/jkapp/software/jdk1.8.0_161/bin/java  -XX:+UseG1GC -Xms922M -Xmx922M -XX:MaxDirectMemorySize=8388607T  -Dlog.file=/home/jkapp/flink-1.7.2/log/flink-jkapp-taskexecutor-14-wangzhe.log -Dlog4j.configuration=file:/home/jkapp/flink-1.7.2/conf/log4j.properties -Dlogback.configurationFile=file:/home/jkapp/flink-1.7.2/conf/logback.xml -classpath /home/jkapp/flink-1.7.2/lib/flink-python_2.12-1.7.2.jar:/home/jkapp/flink-1.7.2/lib/log4j-1.2.17.jar:/home/jkapp/flink-1.7.2/lib/slf4j-log4j12-1.7.15.jar:/home/jkapp/flink-1.7.2/lib/flink-dist_2.12-1.7.2.jar::: org.apache.flink.runtime.taskexecutor.TaskManagerRunner --configDir /home/jkapp/flink-1.7.2/conf > /home/jkapp/flink-1.7.2/log/flink-jkapp-taskexecutor-14-wangzhe.out 200<&- 2

JobManager

/home/jkapp/software/jdk1.8.0_161/bin/java  -Xms1024m -Xmx1024m  -Dlog.file=/home/jkapp/flink-1.7.2/log/flink-jkapp-standalonesession-1-wangzhe.log -Dlog4j.configuration=file:/home/jkapp/flink-1.7.2/conf/log4j.properties -Dlogback.configurationFile=file:/home/jkapp/flink-1.7.2/conf/logback.xml -classpath /home/jkapp/flink-1.7.2/lib/flink-python_2.12-1.7.2.jar:/home/jkapp/flink-1.7.2/lib/log4j-1.2.17.jar:/home/jkapp/flink-1.7.2/lib/slf4j-log4j12-1.7.15.jar:/home/jkapp/flink-1.7.2/lib/flink-dist_2.12-1.7.2.jar::: org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint --configDir /home/jkapp/flink-1.7.2/conf --executionMode cluster > /home/jkapp/flink-1.7.2/log/flink-jkapp-standalonesession-1-wangzhe.out 200<&- 2

          参考脚本的配置,只需要引入额外的jar包并关联配置目录,jar包和配置文件可以通过flink的二进制发行包获得。

           Flink源码阅读(一)源码环境搭建_第3张图片

           Flink源码阅读(一)源码环境搭建_第4张图片

           Flink源码阅读(一)源码环境搭建_第5张图片

           问题2:

                 没有日志: 

                 修改 flink-runtime下  src/main/resources 目录 log4j.properties文件

                  Flink源码阅读(一)源码环境搭建_第6张图片

           启动JobManager和TaskManager

                      访问 http://127.0.0.1:8081/ 页面如下图所示

             Flink源码阅读(一)源码环境搭建_第7张图片

            源码编译

                 这块并不是我学习的重点,所以就贴一个网址吧!

                 https://ci.apache.org/projects/flink/flink-docs-release-1.8/flinkDev/building.html

          

               

 

你可能感兴趣的:(Flink源码学习)