为什么flink容器vcore大小总是1

时间:2017-12-26 06:46:21

标签: yarn apache-flink

我在纱线上运行flink(更准确地说是在AWS EMR纱线集群中)。

我读取了默认情况下每个任务管理器容器的flink文档和源代码,flink将请求每个任务管理器的插槽数量作为来自yarn的请求资源时的vcores数量。 我还从源代码中确认:

// Resource requirements for worker containers
            int taskManagerSlots = taskManagerParameters.numSlots();
            int vcores = config.getInteger(ConfigConstants.YARN_VCORES, 
Math.max(taskManagerSlots, 1));
            Resource capability = Resource.newInstance(containerMemorySizeMB, 
vcores);

            resourceManagerClient.addContainerRequest(
                new AMRMClient.ContainerRequest(capability, null, null, 
priority));

当我使用 -yn 1 -ys 3 开始flink时,我假设纱线将为唯一的任务管理器容器分配3个vcores,但当我检查每个容器的vcores数量时资源管理器web ui,我总是看到vcores的数量是1.我还看到vcore从纱线资源管理器日志中得到1。

我将flink源代码调试到下面粘贴的行,我看到 vcores 的值 3 。 这真让我感到困惑,任何人都可以帮我澄清一下,谢谢。

3 个答案:

答案 0 :(得分:2)

Kien Truong的回答

您好,

您必须在YARN中启用 CPU调度,否则,它始终显示每个容器只分配了1个CPU, 无论Flink尝试分配多少。因此,您应该在 capacity-scheduler.xml 中添加(编辑)以下属性:

<property>
 <name>yarn.scheduler.capacity.resource-calculator</name>
 <!-- <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> -->
 <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>

例如,TaskManager内存为1400MB,但Flink为堆外内存预留了一些金额,因此实际堆大小更小。

这由2个设置控制:

containerized.heap-cutoff-min: default 600MB

containerized.heap-cutoff-ratio: default 15% of TM's memory

这就是为什么TM的堆大小限制为~800MB(1400 - 600)

此致

答案 1 :(得分:0)

@yinhua。

使用该命令启动会话:./bin/yarn-session.sh,您需要添加-s arg。

  

-s, - slots每个TaskManager的插槽数

详细信息:

  1. https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/deployment/yarn_setup.html
  2. https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/cli.html#usage

答案 2 :(得分:0)

我终于得到了答案。 这是因为使用纱线&#34; DefaultResourceCalculator&#34;分配策略,因此只有内存计算为纱线RM,即使flink请求3个vcores,但纱线只是忽略cpu核心数。

相关问题