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

Flink job on EMR runs only on one TaskManager

我正在 运行宁 EMR 集群,有 3 个 m5.xlarge 节点(1 个主节点,2 个核心节点)并安装了 Flink 1.8 (emr-5.24.1)。

在主节点上,我使用以下命令在 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 节点管理器时,我发现其中一个核心节点上只有一个容器 运行ning。 YARN 资源管理器显示应用程序仅使用了 50% 的集群。

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

如果作业并行度设置为 4(或更少),则作业 运行s 应该如此。查看 CPU 和 Ganglia 的内存利用率,它表明只有一个节点被利用,而另一个持平。

为什么应用程序 运行 只在一个节点上以及如何利用另一个节点?我是否需要在 YARN 上设置一些东西,它也会在另一个节点上设置 Flink?

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

当您启动 'Session Cluster' 时,您应该只会看到一个用于 Flink 作业管理器的容器。这可能就是您在 YARN 资源管理器中看到的内容。提交作业后,系统会自动为任务管理器分配额外的容器。

您在资源管理器中看到有多少核心可用UI?

不要忘记,作业管理器还使用可用的 8 个内核中的内核。

你需要在这里做一点"Math"。 例如,如果您将插槽数设置为每个 TM 2 个并且每个 TM 内存更少,然后提交一个并行度为 6 的作业,它应该使用 3 个 TM。