纱线容器的理解和调整

嗨,我们最近从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 = 3gbmapreduce.map.cpu.vcores=4 。 我也有yarn.scheduler.minimum-allocation-mb = 1024myarn.scheduler.minimum-allocation-vcores = 1

这是否意味着我将获得一个带有4个核心的容器或带有一个核心的4个容器?

还不清楚在哪里可以指定mapreduce.map.memory.mbmapreduce.map.cpu.vcores 。 它们应该设置在客户机节点中还是可以按应用程序设置?

同样来自RM UI或AM UI有没有办法查看当前为给定应用程序分配的容器?

  1. 容器是一个逻辑实体。 它授予应用程序在特定主机(节点管理器)上使用特定数量的资源(内存,CPU等)。 无法跨地图重复使用容器,并减少同一应用程序的任务。

例如,我有一个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; 

由于有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 :当前代码不能支持多于一个,并且会忽略更大的值。)

  1. 没有可用的配置参数来指定容器的最小数量。 Application Master负责请求所需的容器数量。

  2. 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)

  3. 参数“mapreduce.map.memory.mb”“mapreduce.map.cpu.vcores”在mapred-site.xml文件中设置。 如果此配置参数不是“final”,则可以在提交作业之前在客户端中覆盖它。

  4. 是。 从应用程序的“应用程序尝试”页面,您可以看到已分配的容器数。 请查看上图。