我正在运行具有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 ,用于指定任务管理器的数量。该选项现在已过时。
答案 0 :(得分:1)
在启动“会话群集”时,您应该只会看到一个用于Flink Job Manager的容器。这可能是您在YARN资源管理器中看到的。提交作业后,其他容器将自动分配给任务管理器。
您在Resource Manager UI中看到多少个核心可用?
别忘了,作业管理器也使用可用8中的内核。
您需要在此处做一些“算术”。 例如,如果您将每个TM的插槽数设置为2,而每个TM的内存更少,则提交并行度为6的作业,则应该使用3个TM。