纱线容器的理解和调整
嗨,我们最近从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有没有办法查看当前为给定应用程序分配的容器?
- 容器是一个逻辑实体。 它授予应用程序在特定主机(节点管理器)上使用特定数量的资源(内存,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 :当前代码不能支持多于一个,并且会忽略更大的值。)
-
没有可用的配置参数来指定容器的最小数量。 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”,则可以在提交作业之前在客户端中覆盖它。
-
是。 从应用程序的“应用程序尝试”页面,您可以看到已分配的容器数。 请查看上图。
- ClassNotFoundException org.apache.mahout.math.VectorWritable
- Hadoop:没有可写接口的简单方法将对象作为输出值
- 从FSDataInputStream转换为FileInputStream
- 在Loop之后,全局变量的值不会改变
- 为什么将Mapper和Reducer类声明为静态?
- 使用–jars的spark-submit yarn-cluster不起作用?
- 在Spark中计算RDD昂贵任务中的记录?
- 引起:java.lang.ClassNotFoundException:org.apache.zookeeper.KeeperException
- 执行UDF时Pig错误1070