在纱线群集和分离模式下使用时,我的主要方法在哪里运行

时间:2020-09-05 08:46:44

标签: apache-flink

我是flink的新手,正在阅读Flink 1.8源代码(https://github.com/apache/flink/tree/release-1.8),以了解flink如何与YARN一起工作。

我知道每个作业集群模式有detached mode and non-detached mode

对于非分离模式,例如以下命令:

flink run -m yarn-cluster -c my.HelloFlink -yn 2 -ys 1 ./my.jar

在部署纱线群集之后,客户端进程开始运行我的主方法(my.HelloFlink#main),并且直到我的主方法完成后,客户端进程才终止。

对于分离模式,例如以下命令:

flink run -d -m yarn-cluster -c my.HelloFlink -yn 2 -ys 1 ./my.jar

在部署了纱线集群之后,客户端进程很快终止,但是我没有找到我的主要方法在哪里运行(my.HelloFlink#main),有人可以帮我解决这个问题并帮助我的主要方法在哪里运行?

谢谢,我已经在这个问题上奋斗了好几天,非常感谢!

1 个答案:

答案 0 :(得分:0)

使用flink run ...时,您正在运行以该行结尾的bash脚本

exec $JAVA_RUN $JVM_ARGS $FLINK_ENV_JAVA_OPTS "${log_setting[@]}" -classpath "`manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" org.apache.flink.client.cli.CliFrontend "$@"

会启动运行CliFrontend的JVM。您的主要方法在那里运行。您的主要方法是构造一个作业图,并将其及其依赖项提交给纱线簇。如果您以分离模式运行,则此CliFrontend进程仅在提交作业后退出,因为它不再有用。

顺便说一句,Flink 1.11添加了一个新的flink run-application部署目标,该目标运行作业管理器中的main方法。在某些情况下,这具有明显的优势。有关详细信息,请参见Application Deployment in Flink: Current State and the new Application Mode