nir*_*nir 6 java hadoop hadoop-yarn
嗨,我们最近从mr1升级到纱线.我知道容器是一个抽象的概念,但我不明白一个容器可以产生多少jvm任务(map,reduce,filter等),或者其他方式要求是容器可以跨多个映射重复使用或减少任务.我在下面的博客中读到:YARN中的容器是什么?
"each mapper and reducer runs on its own container to be accurate!" 这意味着如果我查看AM日志,我应该看到分配的容器数等于map任务的数量(失败|成功)加上reduce任务的数量是正确的吗?
我知道应用程序生命周期中容器的数量会根据AM请求,拆分,调度程序等而发生变化.
但有没有办法请求给定应用程序的最小容器的初始数量.我认为一种方法是配置公平调度程序队列.但还有什么能够决定这个吗?
在MR的情况下,如果我有mapreduce.map.memory.mb = 3gb和
mapreduce.map.cpu.vcores=4.我也有yarn.scheduler.minimum-allocation-mb = 1024m和yarn.scheduler.minimum-allocation-vcores = 1.
这是否意味着我将获得一个带有4个核心的容器或带有一个核心的4个容器?
还不清楚你在哪里可以指定mapreduce.map.memory.mb和mapreduce.map.cpu.vcores.它们应该设置在客户端节点中还是可以按应用程序设置?
同样来自RM UI或AM UI是否有办法查看当前为给定应用程序分配的容器?
Man*_*lur 10
例如,我有一个Mapreduce应用程序,它产生了10个映射器:

我在具有8个vCore的单个主机上运行此命令(此值由配置参数确定:yarn.nodemanager.resource.cpu-vcores).默认情况下,此值设置为8.请检查"YarnConfiguration.java"
/** Number of Virtual CPU Cores which can be allocated for containers.*/
public static final String NM_VCORES = NM_PREFIX + "resource.cpu-vcores";
public static final int DEFAULT_NM_VCORES = 8;
Run Code Online (Sandbox Code Playgroud)
由于有10个映射器和1个应用程序主站,因此产生的容器总数为11.

因此,对于每个map/reduce任务,都会启动另一个容器.
但是,在Yarn中,对于MapReduce作业,有一个Uber作业的概念,它允许用户使用单个容器用于多个映射器和1个reducer(https://hadoop.apache.org/docs/r2.4.1/ hadoop-yarn/hadoop-yarn-common/yarn-default.xml:当前代码不能支持多于一个,并且会忽略更大的值.)
没有可用的配置参数来指定容器的最小数量.Application Master负责请求所需的容器数量.
yarn.scheduler.minimum-allocation-mb - 确定每个容器的最小内存分配(yarn.scheduler.maximum-allocation-mb确定每个容器请求的最大分配)
yarn.scheduler.minimum-allocation-vcores - 确定每个容器的vCores的最小分配(yarn.scheduler.maximum-allocation-vcores确定每个容器请求的最大分配)
在您的情况下,您要求" mapreduce.map.memory.mb = 3m(3MB)和mapreduce.map.cpu.vcores = 4(4个vCores).
因此,每个映射器将获得1个带有4个vCore的容器(假设yarn.scheduler.maximum-allocation-vcores > = 4)
参数"mapreduce.map.memory.mb"和"mapreduce.map.cpu.vcores"在mapred-site.xml文件中设置.如果此配置参数不是"final",则可以在提交作业之前在客户端中覆盖它.
是.从应用程序的"应用程序尝试"页面,您可以看到已分配的容器数.请查看上图.
| 归档时间: |
|
| 查看次数: |
3609 次 |
| 最近记录: |