暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

源码搞起:IDEA远程调试FlinkOnYarn集群三种运行模式全攻略

大数据从业者 2022-07-31
3032

背景

      温馨提示:微信公众号私信有时效性、过期不可回复,很多朋友私信我没及时看到、未能回复。最近新建钉钉群(44703541),欢迎朋友加入!          现场局点使用Flink场景越来越多、涉足flink-runtime模块flink-yarn模块内容也越来越多。flink-runtime模块涵盖JobManager、TaskManager源码;flink-yarn模块涵盖flinkonyarn所有运行模式源码(session、per-job、application)。如果想方便高效率学习掌握相关内容,直接生撸静态源码对于学习者并不是最好的选择,使用idea远程debug各种Flink运行模式可以达到事半功倍的效果。最近在处理现场问题需要远程debug,本文进行简单总结,具体现场问题处理情况待后续发文详述。部署FlinkOnYarn集群本文不再重复赘述。


拷贝IDEA debug命令行

     长时间不使用idea远程debug,很容易忘记如何操作,这里也简单说明下。导入Flink源码到idea之后,右上角位置打开Run/Debug Configurations、点击左上角加号找到Remote,Command line arguments for remote JVM内容即为我们需要的命令行:

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

        注意:需要同时添加两个Remote,分别用于JobManger、TaskManager。然后分别将默认Name值Unamed改为JobManager和TaskManager(仅便于使用、非必需操作)。


    配置flink-conf.yaml

           Flink官方文档(Deployment->Configuration章节)有配置JobManager和TaskManager的JVM参数的相关说明,不记得可以查阅。

    增加如下两项参数到flink-conf.yaml文件

      env.java.opts.jobmanager: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
      env.java.opts.taskmanager: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006"


      准备Yarn集群环境

            远程debug需要上述已经配置debug端口(5005、5006)启动才行。所以,如果想debug集群启动过程,时间点得卡好,确保debug端口刚启动idea就能建立连接。建议将yarn集群NodeManager进程停掉仅剩一个,以免Flink作业运行container所在NodeManager不确定。这样idea中配置的Host就唯一,便于提交Flink作业之后能及时通过idea与debug端口建立连接。

      如图,yarn集群NodeManager仅剩一个节点felixzh。


      远程调试yarn-per-job模式

      该模式入口类为YarnJobClusterEntrypoint

        具体路径:flink\flink-yarn\src\main\java\org\apache\flink\yarn\entrypoint\YarnJobClusterEntrypoint.java

        在该类main方法中增加断点。

        使用flink自带SocketWindowWordCount.jar用例启动一个yarn-per-job的作业。

          nc -l 4444
          [root@felixzh flink-1.13.6]# bin/flink run -t yarn-per-job examples/streaming/SocketWindowWordCount.jar --hostname felixzh --port 4444


          提交任务之后,立即通过idea连接debug端口(不停重试、直到连接):


          远程调试yarn-application模式

          该模式入口类为YarnApplicationClusterEntryPoint

            具体路径:flink\flink-yarn\src\main\java\org\apache\flink\yarn\entrypoint\YarnApplicationClusterEntryPoint.java

            调试方法同上,提交命令:

              [root@felixzh flink-1.13.6]# bin/flink run-application -t yarn-application examples/streaming/SocketWindowWordCount.jar --hostname felixzh --port 4444


              远程调试yarn-session模式

              该模式入口类为YarnSessionClusterEntrypoint 

                flink\flink-yarn\src\main\java\org\apache\flink\yarn\entrypointYarnSessionClusterEntrypoint.java

                调试方法同上,提交命令:

                  [root@felixzh flink-1.13.6]# bin/yarn-session.sh

                  总结

                        至此,Flink on Yarn三种集群运行模式的远程debug方法描述完成。不要生撸静态源码了,让我们run起来。

                  文章转载自大数据从业者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论