我在纱线上运行flink (更准确地说,在AWS EMR纱线集群中)。
我阅读了flink文档和源代码,默认情况下,对于每个任务管理器容器,flink将请求每个任务管理器的插槽数,作为从纱线请求资源时的vcore数。我还从源代码中确认:
// 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个vcore,但当我从纱线资源管理器web ui中检查每个容器的vcore数量时,我总是看到vcore的数量为1。我还从纱线资源管理器日志中看到vcore为1。
我在下面粘贴的行中调试了flink源代码,我看到了vcore的值是3。这真是把我搞糊涂了,谁能帮我澄清一下,谢谢。
发布于 2018-04-29 10:17:45
仁真的回答
嗨,
您必须在纱线中启用CPU调度,否则,它总是显示每个容器只分配了1个CPU,而不管有多少试图分配。因此,您应该在容量调度器中添加(编辑)以下属性
<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>例如,ALso,taskManager内存是1400 so,但是Flink为堆外内存保留了一定数量的内存,因此实际的堆大小更小。
这是由两个设置控制的:
containerized.heap-cutoff-min: default 600MB
containerized.heap-cutoff-ratio: default 15% of TM's memory这就是为什么您的TM的堆大小被限制在~800 TM(1400-600)
发布于 2018-01-16 11:30:30
@银华。
使用命令启动会话:./bin/yarn-session.sh,您需要添加-s arg。
-s,--每个TaskManager的插槽数
详情:
发布于 2018-03-23 06:36:36
我终于得到了答案。这是因为纱线采用了"DefaultResourceCalculator“分配策略,因此,即使flink请求3个vcores,纱线也只计算内存,而纱线却忽略了cpu的核心号码。
https://stackoverflow.com/questions/47974877
复制相似问题