为什么Flink容器Vcore尺寸总是1



我在纱线上运行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时,我认为Yarn将为唯一的任务管理器容器分配3个VCORS,但是当我从yarn中检查每个容器的VCORES数量时Resource Manager Web UI,我总是看到VCORS的数量为1。我还认为VCORE是YARN Resource Manager Logs的VCORE。

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

kien truong

的答案

嗨,

您必须在YARN 中启用 CPU调度,否则,它总是显示为每个容器分配1个CPU,不管有多少弗林克尝试分配。因此,您应该在 coppation-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)

@yinhua。

使用命令开始一个会话: ./bin/yarn-session.sh,您需要添加 -s arg。

-s, - 每个Taskmanager插槽的插槽

详细信息:

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

我最终得到答案。这是因为纱线使用" Defaultresourcecalculator"分配策略,因此,即使Flink请求3个VCORES,也只能计算YARN RM的内存,但是Yarn只是忽略了CPU核心编号。

相关内容

  • 没有找到相关文章

最新更新