flink on yarn部署模式依赖预上传设置

1,576 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

flink on yarn 将运行所需的依赖包与上传到远程(如:hdfs系统),这将使作业提交变得非常轻量级,因为所需的Flink jar和应用程序jar将由指定的远程获取,而不是由客户端发送到集群。

  1. Application Mode on yarn
./bin/flink run-application \
-t yarn-application \
-Dyarn.application.name="flink-yarn-application" \
-Dtaskmanager.numberOfTaskSlots=5 \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Drest.flamegraph.enabled=true \
-Dyarn.provided.lib.dirs="hdfs://bdptest/data/flink-1.15.0/lib;hdfs:///data/flink-1.15.0/plugins" \
hdfs:///data/flink-1.15.0/flink-demo01-1.0-SNAPSHOT-pony-shade.jar 

NOTE:

Flink 应用的执行包含两个阶段:

  • pre-flight: 在main()方法调用之后开始,构造job graph。
  • runtime: 一旦用户代码调用 execute() 就会触发该阶段。

只有在application模式main函数所依赖的jar包(flink-dist-jar)才可以放到远程分布式文件系统,因为application模式的main方法在jobmanager执行。 但是对于Session模式和Per-Job模式,main方法在客户端执行。

  1. Per-Job Cluster Mode on yarn
./bin/flink run -t yarn-per-job --detached \
-Dyarn.application.name="flink-yarn-perjob" \
-Dyarn.provided.lib.dirs="hdfs://bdptest/data/flink-1.15.0/lib;hdfs:///data/flink-1.15.0/plugins" \
./examples/streaming/TopSpeedWindowing.jar
  1. Session Mode on yarn
./bin/yarn-session.sh --detached \
-Dyarn.application.name="flink-yarn-session" \
-Dtaskmanager.numberOfTaskSlots=5 \
-Dyarn.provided.lib.dirs="hdfs://bdptest/data/flink-1.15.0/lib;hdfs:///data/flink-1.15.0/plugins" \
-Drest.flamegraph.enabled=true 
./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

【yarn.provided.lib.dirs】参数解释

指定远程依赖包所在的路径,可以是多个路径,使用分号分割。此路径下的依赖包是预先上传的,并且全局可读的。 该种模式的操作使得 flink 作业提交变得很轻量,避免了从本地客户端上传Flink依赖(例如:Flink-dist、lib/、plugins/),以加速作业提交过程。 另外,YARN会将它们缓存到节点上,这样就不需要为每个应用程序每次都下载依赖。这也是社区在 flink-1.11 版本引入新的部署模式的意义所在。

NOTE: 如果自己指定 yarn.provided.lib.dirs,有以下注意事项:

  • 需要将 lib 包和 plugins 包地址用;分开,从上面的例子中也可以看到,将 plugins 包放在 lib 目录下可能会有包冲突错误
  • plugins 包路径地址必须以 plugins 结尾,例如上面例子中的 hdfs:///data/flink-1.15.0/plugins

示例:

hdfs://{namenode_address}/data/flink-1.15.0/lib;hdfs://{namenode_address}/data/flink-1.15.0/plugins;hdfs://{namenode_address}/data/flink-1.15.0/flink-dist

应用说明

  • 如果不指定【yarn.provided.lib.dirs】 应用程序flink依赖包在nodemanager节点的分布情况:

/data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0026/filecache/53/flink-dist-1.15.0.jar /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0026/container_e31_1655891072415_0026_01_000001/flink-dist-1.15.0.jar

flink-dist-1.15.0.jar是在当前application_1655891072415_0026下面,任务停止,依赖被清除。等下次再次启动flink任务时,再次从client上传到hdfs,然后下发到计算节点指定目录。当前节点上的container的依赖取的是当前applicationId filecache上的超链接,如下:

[root@hadoop05 ~]# find / -name flink-dist-1.15.0.jar
/data/hadoop/yarn/local/filecache/79/flink-dist-1.15.0.jar
/data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/filecache/52/flink-dist-1.15.0.jar
/data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/container_e31_1655891072415_0048_01_000001/flink-dist-1.15.0.jar
/data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/container_e31_1655891072415_0048_01_000002/flink-dist-1.15.0.jar
[root@hadoop05 ~]# ll /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/container_e31_1655891072415_0048_01_000001/flink-dist-1.15.0.jar
lrwxrwxrwx 1 yarn hadoop 118 Jun 24 12:14 /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/container_e31_1655891072415_0048_01_000001/flink-dist-1.15.0.jar -> /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0048/filecache/52/flink-dist-1.15.0.jar
  • 如果不指定【yarn.provided.lib.dirs】 应用程序flink依赖包在nodemanager节点的分布情况:

/data/hadoop/yarn/local/filecache/79/flink-dist-1.15.0.jar /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0046/container_e31_1655891072415_0046_01_000001/lib/flink-dist-1.15.0.jar

flink-dist-1.15.0.jar不是在当前application_1655891072415_0046下面,任务停止,依赖依然存在。等下次再次启动flink任务时,直接复用。当前节点上的container的依赖取的是当前filecache上的超链接,如下:

[root@hadoop05 ~]# ll /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0047/container_e31_1655891072415_0047_01_000001/lib/flink-dist-1.15.0.jar
lrwxrwxrwx 1 yarn hadoop 63 Jun 24 12:09 /data/hadoop/yarn/local/usercache/root/appcache/application_1655891072415_0047/container_e31_1655891072415_0047_01_000001/lib/flink-dist-1.15.0.jar -> /data/hadoop/yarn/local/filecache/79/flink-dist-1.15.0.jar