我正在使用EMR 4.1.0 + spark 1.5.0 + YARN来处理大数据。我正在尝试使用完整集群,但有些YARN没有分配所有资源。
yarn.nodemanager.resource.memory-mb - > 53856 yarn.nodemanager.resource.cpu-vcores - > 26 yarn.scheduler.capacity.resource-calculator - > org.apache.hadoop.yarn.util.resource.DominantResourceCalculator (所以纱线可以管理内存和核心)
然后我开始使用pyspark pyspark --master yarn-client --num-executors 24 --executor-memory 8347m --executor-cores 4
但RM UI显示以下
它只分配21个容器,而不是24个容器 27 GB预留内存和12个预留内核可用于分配更多3个容器。正确?
我在这里缺少什么?
谢谢!
答案 0 :(得分:0)
From here,看起来你的基数应该是53248M。此外,必须考虑10%的内存开销(spark.yarn.executor.memoryOverhead)。 53248 * .9 = 47932M,可以在每个节点上分配。如果为每个执行程序分配8347M,则每个节点只能包含其中的5个。 47932 - 5 * 8347 = 6197M,没有足够的可用内存来启动第6个执行程序。最后3个执行程序(每个节点一个)没有启动,因为它们没有足够的内存来启动它们。如果您想拥有24个容器,请使用--executor-memory 7987M
启动注意,如果您使用此配置,则将有6个未使用的核心/节点。此电子表格可以帮助您找到任何类型/大小的群集的最佳配置