【发布时间】:2012-12-31 04:10:20
【问题描述】:
YARN 中的容器是什么?是和nodemanager上的任务运行的子JVM一样还是不一样?
【问题讨论】:
标签: hadoop mapreduce hadoop-yarn
YARN 中的容器是什么?是和nodemanager上的任务运行的子JVM一样还是不一样?
【问题讨论】:
标签: hadoop mapreduce hadoop-yarn
Container是资源分配,是ResourceManager授予特定ResourceRequest的成功结果。 Container 授予应用程序使用特定主机上特定数量的资源(内存、cpu 等)的权利。
【讨论】:
容器是应用程序运行其任务的地方。 如果你想知道集群中运行容器的总数,那么你可以查看你的集群 Yarn-Resource manager UI。
纱线网址:http://Your-Active-ResourceManager-IP:45020/cluster/apps/RUNNING
在“正在运行的容器”列中,总数。正在运行的容器的详细信息。
注意:如果您使用的是 spark,那么 spark 执行器将在容器内运行。一个容器可以容纳多个 spark executor。
【讨论】:
根据输入数据的大小,创建多个输入拆分。 MR 作业需要处理整个数据,以便创建多个任务(映射和减少任务)。因此,对于每个输入拆分将由一个任务处理。现在如何运行这个任务,由资源管理器建议。资源管理器知道哪个节点管理器空闲,哪个节点管理器忙,就像学院的校长和节点管理器是学院的班主任,校长知道哪个老师有空。因此它要求节点管理器在容器中运行该任务(整个作业的一小部分),即 jvm 之类的内存区域。因此,该作业在容器内作为应用程序主机运行。
【讨论】:
“容器”一词在 YARN 中用于两种情况,
Container:表示分配给ApplicationMaster的资源。 ResourceManager 负责向 ApplicationMaster 发布资源/容器。检查Container API。
启动Container: ApplicationMaster根据分配的资源(容器)请求NodeManager启动Container,从而在节点上执行任务。检查ContainerManager API。
【讨论】:
Container :
资源的逻辑租约和节点上产生的实际进程可以互换使用。 它与任务(或 AM)运行的过程相同。 为了启动容器,我们提供了容器对象和 CLC (ContainerLaunchContext),我们在其中设置了运行任务(或 AM)的命令列表。
nmClient.startContainer(container, clcObj)
ContainerLaunchContext code snippet :
<code>
.
.
.
/**
* Add the list of <em>commands</em> for launching the container. All
* pre-existing List entries are cleared before adding the new List
* @param commands the list of <em>commands</em> for launching the container
*/
@Public
@Stable
public abstract void setCommands(List<String> commands);
</code>
【讨论】:
在 Hadoop 2.x 中,容器是一个工作单元发生的地方。例如,每个 MapReduce 任务(不是整个作业)都在一个容器中运行。
应用程序/作业将在一个或多个容器上运行。
为每个容器分配一组系统资源,目前支持 CPU 内核和 RAM。 Hadoop 集群中的每个节点都可以运行多个容器。
在 Hadoop 1.x 中,JobTracker 分配一个槽来运行每个 MapReduce 任务。然后 TaskTracker 为每个任务生成一个单独的 JVM(除非未启用 JVM 重用)。
【讨论】:
它表示给定集群中单个节点上的资源(内存)。
一个容器是
一个 MR 任务在这样的容器中运行。
【讨论】:
MRAppMaster 跨越数百或数千个容器。此外,由丰富的资源向量描述的容器并不只代表内存。
简单来说,Container 是运行 YARN 应用程序的地方。它在每个节点中都可用。 Application Master 与调度器(资源管理器的组件之一)协商容器。容器由节点管理器启动。
【讨论】:
单个节点上可以有多个容器(或单个非常大的)。
系统中的每个节点都被认为是由多个具有最小内存大小(例如 512MB 或 1 GB)的容器组成。 ApplicationMaster 可以请求任何容器作为最小内存大小的倍数。
Source,参见资源管理器/资源模型部分。
【讨论】: