EMR上的Flink作业仅在一个TaskManager上运行

时间:2019-07-08 20:51:23

标签: yarn apache-flink amazon-emr

我正在运行具有3个m5.xlarge节点(1个主节点,2个核心)和Flink 1.8(emr-5.24.1)的EMR集群。

在主节点上,我使用以下命令在YARN群集中启动Flink会话:

flink-yarn-session -s 4 -jm 12288m -tm 12288m

这是YARN允许我根据所选实例类型设置的每个TaskManager的最大内存和插槽。

在启动过程中有一条日志:

org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Cluster specification: ClusterSpecification{masterMemoryMB=12288, taskManagerMemoryMB=12288, numberTaskManagers=1, slotsPerTaskManager=4}

这表明只有一个任务管理器。同样,在查看YARN节点管理器时,我看到只有一个容器在核心节点之一上运行。 YARN资源管理器显示该应用程序仅使用了集群的50%。

在当前设置下,我假设可以在并行度设置为8(2 TaskManagers * 4个插槽)的情况下运行Flink作业,但是如果提交的作业将并行度设置为4以上,它会在一段时间后失败,因为无法获得所需的资源。

如果作业并行度设置为4(或更小),则作业将按预期运行。通过Ganglia查看CPU和内存的使用情况,可以发现只有一个节点被利用,而另一个则被利用。

为什么应用程序仅在一个节点上运行,以及如何利用另一个节点?我是否需要在YARN上设置某些内容,以便在其他节点上也设置Flink?

在以前的Flik版本中,有启动选项 -n ,用于指定任务管理器的数量。该选项现在已过时。

1 个答案:

答案 0 :(得分:1)

在启动“会话群集”时,您应该只会看到一个用于Flink Job Manager的容器。这可能是您在YARN资源管理器中看到的。提交作业后,其他容器将自动分配给任务管理器。

您在Resource Manager UI中看到多少个核心可用?

别忘了,作业管理器也使用可用8中的内核。

您需要在此处做一些“算术”。 例如,如果您将每个TM的插槽数设置为2,而每个TM的内存更少,则提交并行度为6的作业,则应该使用3个TM。