我正在为Spark使用亚马逊特定的maximizeResourceAllocation
标志(如记录here)运行EMR集群(版本emr-4.2.0)。根据这些文档,“该选项计算核心节点组中节点上执行程序可用的最大计算和内存资源,并使用此信息设置相应的spark-defaults设置”。使用Amazon的“maximizeResourceAllocation”设置的Spark + EMR不使用所有内核/核心
我使用m3.2xlarge实例为工作节点运行群集。我为YARN master使用了一个单独的m3.xlarge - 我可以运行它的最小m3实例,因为它没有太多的工作。
情况是这样的:当我运行一个Spark作业时,每个执行程序请求的内核数为8个(配置为"yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"
后我才得到这个,但实际上并没有在文档中,但我离题了)。这似乎是有道理的,因为根据these docs m3.2xlarge有8“vCPU”。但是,在实际实例本身中,在/etc/hadoop/conf/yarn-site.xml
中,每个节点都配置为yarn.nodemanager.resource.cpu-vcores
设置为16
。我会(猜测)认为这一定是由于超线程或其他一些硬件的幻想。
所以问题是这样的:当我使用maximizeResourceAllocation
时,我得到了Amazon Instance类型所具有的“vCPU”数量,这似乎只是YARN运行在配置“VCores”数量的一半节点;因此,执行程序仅使用实例上实际计算资源的一半。
这是Amazon EMR中的错误吗?其他人是否遇到同样的问题?是否还有其他一些我没有记录的魔法无证配置?
它确实表明:但问题在于那些“8”核心实际上只有YARN分配的16个“VCores”中的8个;机器上一半的实际CPU资源将闲置。由于我试图运行CPU密集型作业,这显然是CPU浪费(和钱)。) – retnuH
核心只是实例类型本身的抽象。没有实际的内核绑定,因此执行程序将使用尽可能多的CPU应用程序请求。使用DominantResourceCalculator作为调度程序时唯一的绑定来了。需要注意的一点是,此实例类型的EMR默认配置是vcore值的两倍,以告知纱线以帮助提高MapReduce的CPU利用率。 maximizeResourceAllocation正在查看实例类型核心定义。 – ChristopherB