YARN 中的容器是什么?它与节点管理器上的任务运行的子JVM相同还是不同?
9 回答
它表示给定集群中单个节点上的资源(内存)。
一个容器是
- 由节点管理器监督
- 由资源管理器安排
一个 MR 任务在这样的容器中运行。
单个节点上可以有多个容器(或单个非常大的容器)。
系统中的每个节点都被认为是由多个具有最小内存大小(比如 512MB 或 1 GB)的容器组成。ApplicationMaster 可以请求任何容器作为最小内存大小的倍数。
Source,请参阅 ResourceManager/Resource Model 部分。
在 YARN 中,“容器”一词在两种情况下使用,
Container:表示分配给ApplicationMaster的资源。ResourceManager 负责向 ApplicationMaster 发布资源/容器。检查容器API。
启动容器:根据分配的资源(容器)ApplicationMaster请求NodeManager启动容器,从而在一个节点上执行任务。检查ContainerManager API。
在 Hadoop 2.x 中,Container 是一个工作单元发生的地方。例如,每个 MapReduce 任务(不是整个作业)都在一个容器中运行。
应用程序/作业将在一个或多个容器上运行。
为每个容器分配一组系统资源,目前支持 CPU 内核和 RAM。Hadoop 集群中的每个节点都可以运行多个容器。
在 Hadoop 1.x 中,JobTracker 分配一个槽来运行每个 MapReduce 任务。然后 TaskTracker 为每个任务生成一个单独的 JVM(除非未启用 JVM 重用)。
简单来说,Container 是运行 YARN 应用程序的地方。它在每个节点中都可用。Application Master 与调度器(资源管理器的组件之一)协商容器。容器由节点管理器启动。
根据输入数据的大小,创建多个输入拆分。MR 作业需要处理整个数据,以便创建多个任务(映射和减少任务)。因此,对于每个输入拆分将由一个任务处理。现在如何运行这个任务,由资源管理器建议。资源管理器知道哪个节点管理器空闲,哪个节点管理器忙,就像学院的校长和节点管理器是学院的班主任,校长知道哪个老师有空。因此它要求节点管理器在容器中运行该任务(整个作业的一小部分),即内存区域,例如 jvm。因此,该作业作为容器内的应用程序主机运行。
Container是资源分配,是ResourceManager授予特定ResourceRequest的成功结果。容器授予应用程序使用特定主机上特定数量的资源(内存、cpu 等)的权利。
容器是应用程序运行其任务的地方。如果你想知道集群中运行容器的总数,那么你可以检查你的集群 Yarn-Resource manager UI。
纱线网址:http://Your-Active-ResourceManager-IP:45020/cluster/apps/RUNNING
在“正在运行的容器”列中,总数。运行容器的详细信息。
注意:如果您使用的是 spark,那么 spark 执行器将在容器内运行。一个容器可以容纳多个火花执行器。
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>