Flink部署于EMR集群的三类核心技术疑问咨询
嘿,作为刚上手在EMR上部署Flink的新手,你的这几个问题都是EMR集成Flink时非常典型的困惑,我来给你逐个讲明白:
1. 主节点conf/slaves文件未配置从节点IP,主从节点如何实现通信?
这是因为EMR上的Flink默认是基于YARN集群模式运行,而不是传统的Flink Standalone模式!
在Standalone模式下,我们需要手动维护slaves文件来指定TaskManager节点,但EMR的YARN本身已经接管了集群节点的管理:主节点是YARN ResourceManager,从节点是YARN NodeManager。Flink的JobManager会直接和YARN ResourceManager交互,由ResourceManager负责发现、调度所有NodeManager节点上的TaskManager资源,底层通信全由YARN框架搞定,完全不需要手动配置slaves文件。
2. 主节点存在Flink库(路径:/usr/lib/flink),但从节点无该库,代码如何在从节点上执行?
这也是EMR+Flink的便捷特性之一,不用你手动在每个从节点部署Flink!
当你提交Flink作业到YARN时,Flink会自动把核心库文件、你的作业Jar包以及依赖打包成分布式缓存,YARN ResourceManager会负责把这些缓存文件分发到所有需要运行TaskManager的NodeManager节点上。从节点的TaskManager启动时,会自动从本地缓存加载这些库文件,从而执行作业的计算逻辑。整个过程都是自动完成的,你只需要在主节点提交作业就行。
3. 若需根据需求修改conf/flink-config.yml配置,除该文件外还需在主节点或从节点进行其他修改吗?
分两种运行场景来看:
- YARN Session模式:修改主节点的
conf/flink-config.yml后,需要重启YARN Session才能让新配置生效。因为YARN Session启动时会读取这个配置文件,并将配置同步给所有后续启动的TaskManager,不需要去任何从节点修改文件。 - Per-Job模式(每次提交作业启动独立YARN应用):你可以直接修改主节点的
conf/flink-config.yml,然后提交作业;或者在提交命令中用-D参数临时覆盖配置(比如flink run -Dtaskmanager.numberOfTaskSlots=4 your-job.jar)。两种方式都不需要修改从节点的任何文件,新提交的作业会自动使用新配置。
另外补充一点:如果是通过EMR控制台修改集群级的Flink配置,EMR会自动同步配置到相关节点;但如果是你手动修改主节点的flink-config.yml,只需要保证提交作业时使用的是这个配置文件即可,从节点完全不用动。
内容的提问来源于stack exchange,提问作者ankita.gulati

