纱容器的理解和调整
Yarn container understanding and tuning
您好,我们最近从 mr1 升级到了 yarn。我知道容器是一个抽象概念,但我不明白一个容器可以生成多少个 jvm 任务(map、reduce、filter 等),或者以其他方式询问容器是否可跨多个 map 或 reduce 任务重用。我阅读了以下博客:What is a container in YARN?
"each mapper and reducer runs on its own container to be accurate!"
这意味着如果我查看 AM 日志,我应该看到分配的容器数量等于映射任务(失败|成功)的数量加上减少任务的数量是否正确?
我知道应用程序生命周期中容器的数量会根据 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 等)。
同一应用程序的 map 和 reduce 任务不能重复使用容器。
例如我有一个 Mapreduce 应用程序,它生成 10 个映射器:
我是运行这个单主机上有8个vCores(这个值由配置参数决定: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 个缩减器(https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml:当前代码无法支持超过一个 REDUCE 并将忽略更大的值。)。
没有可用于指定最小容器数的配置参数。 Application Master 负责请求所需容器的数量。
yarn.scheduler.minimum-allocation-mb - 确定每个容器的最小内存分配(yarn.scheduler.maximum -allocation-mb 确定每个容器请求的最大分配)
yarn.scheduler.minimum-allocation-vcores - 确定每个容器的最小 vCore 分配(yarn.scheduler.maximum-allocation-vcores决定每个容器请求的最大分配)
在你的情况下,你要求“mapreduce.map.memory.mb = 3m (3MB) and mapreduce.map.cpu.vcores = 4(4 个 vCore)。
因此,对于每个映射器,您将获得 1 个容器和 4 个 vCore(假设 yarn.scheduler.maximum-allocation-vcores >= 4)
参数"mapreduce.map.memory.mb"和"mapreduce.map.cpu.vcores"在mapred-site.xml 文件。如果此配置参数不是 "final",则可以在提交作业之前在客户端中覆盖它。
是的。从应用程序的 "Application Attempt" 页面,您可以看到分配的容器数。查看上图
您好,我们最近从 mr1 升级到了 yarn。我知道容器是一个抽象概念,但我不明白一个容器可以生成多少个 jvm 任务(map、reduce、filter 等),或者以其他方式询问容器是否可跨多个 map 或 reduce 任务重用。我阅读了以下博客:What is a container in YARN?
"each mapper and reducer runs on its own container to be accurate!"
这意味着如果我查看 AM 日志,我应该看到分配的容器数量等于映射任务(失败|成功)的数量加上减少任务的数量是否正确?
我知道应用程序生命周期中容器的数量会根据 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 等)。 同一应用程序的 map 和 reduce 任务不能重复使用容器。
例如我有一个 Mapreduce 应用程序,它生成 10 个映射器:
我是运行这个单主机上有8个vCores(这个值由配置参数决定: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 个缩减器(https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml:当前代码无法支持超过一个 REDUCE 并将忽略更大的值。)。
没有可用于指定最小容器数的配置参数。 Application Master 负责请求所需容器的数量。
yarn.scheduler.minimum-allocation-mb - 确定每个容器的最小内存分配(yarn.scheduler.maximum -allocation-mb 确定每个容器请求的最大分配)
yarn.scheduler.minimum-allocation-vcores - 确定每个容器的最小 vCore 分配(yarn.scheduler.maximum-allocation-vcores决定每个容器请求的最大分配)
在你的情况下,你要求“mapreduce.map.memory.mb = 3m (3MB) and mapreduce.map.cpu.vcores = 4(4 个 vCore)。
因此,对于每个映射器,您将获得 1 个容器和 4 个 vCore(假设 yarn.scheduler.maximum-allocation-vcores >= 4)
参数"mapreduce.map.memory.mb"和"mapreduce.map.cpu.vcores"在mapred-site.xml 文件。如果此配置参数不是 "final",则可以在提交作业之前在客户端中覆盖它。
是的。从应用程序的 "Application Attempt" 页面,您可以看到分配的容器数。查看上图