Flink EMR Deployment 无法获取 Yarn 上下文,只能作为本地应用程序执行
Posted
技术标签:
【中文标题】Flink EMR Deployment 无法获取 Yarn 上下文,只能作为本地应用程序执行【英文标题】:Flink EMR Deployment can't pick up Yarn context and executes only as a local application 【发布时间】:2021-02-24 13:47:11 【问题描述】:我正在 AWS EMR 6.2 上部署我的 Flink 应用程序
Flink 版本:1.11.2
我将步骤配置为:
Arguments :"flink-yarn-session -d -n 2"
如此处所述:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-jobs.html
集群和步骤都处于“正在运行”状态。
控制器日志显示:
INFO startExec 'hadoop jar /mnt/var/lib/hadoop/steps/s-309XLKSZGN4V4/trigger-service-***.jar flink-yarn-session -d -n 2'
但是,系统日志显示应用程序没有在 Yarn 上下文中获取。
2021-02-24 13:19:57,772 INFO org.apache.flink.runtime.minicluster.MiniCluster (main): Starting Flink Mini Cluster
我在我的应用中取出StreamExecutionEnvironment.getExecutionEnvironment
返回的类名,确实是LocalStreamEnvironment
。
应用程序本身作为本地应用程序在 JobMaster 实例上正常运行。
【问题讨论】:
【参考方案1】:事实证明 -n 在新版本的 flink 中已被弃用,因此,根据 AWS 支持的建议,我改用了这个命令:
flink-yarn-session -d -s 2
参数含义:
-d,--detached 开始分离
-s,--slots 每个TaskManager的槽数
另外,为了使 Flink 需要创建两个步骤:
--steps '["Args":["flink-yarn-session","-d","-s","2"],"Type":"CUSTOM_JAR","MainClass":"","ActionOnFailure":"CANCEL_AND_WAIT","Jar":"command-runner.jar","Properties":"","Name":"Yarn Long Running Session","Args":["bash","-c","aws s3 cp s3://<URL of Application Jar> .;/usr/bin/flink run -m yarn-cluster -p 2 -d <Application Jar>"],"Type":"CUSTOM_JAR","MainClass":"","ActionOnFailure":"CANCEL_AND_WAIT","Jar":"command-runner.jar","Properties":"","Name":"Flink Job"]
'
第一个使用command-runner.jar来执行
flink-yarn-session -d -s 2
第二个使用 command-runner.jar 从 S3 下载我的应用程序 Jar 并在 yarn-cluster 上使用 flink 运行作业。
【讨论】:
以上是关于Flink EMR Deployment 无法获取 Yarn 上下文,只能作为本地应用程序执行的主要内容,如果未能解决你的问题,请参考以下文章
EMR 日志 uri 与 /usr/lib/flink/log
阿里云EMR实战篇以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤
EMR-StarRocks 与 Flink 在汇量实时写入场景的最佳实践