我是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),有人可以帮我解决这个问题并帮助我的主要方法在哪里运行?
谢谢,我已经在这个问题上奋斗了好几天,非常感谢!
答案 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。