纱线容器理解和调整

时间:2015-10-08 00:08:24

标签: java hadoop yarn

您好我们最近从mr1升级为纱线。我知道容器是一个抽象的概念,但我不知道一个容器可以产生多少jvm任务(映射,缩小,过滤等),或者其他方式要求是容器可以在多个映射或减少任务中重用。我在以下博客中读到:What is a container in 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 个答案:

答案 0 :(得分:10)

  1. Container是一个逻辑实体。它授予应用程序在特定主机(节点管理器)上使用特定数量的资源(内存,CPU等)。 无法跨地图重复使用容器,并减少同一应用程序的任务。
  2. 例如我有一个Mapreduce应用程序,它产生了10个映射器: Number of mappers

    我在具有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。 enter image description here

    因此,对于每个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. 是。来自"应用程序尝试"在该应用程序的页面中,您可以看到已分配容器的数量。请查看上图。

相关问题