什么是YARN中的容器?它与运行nodemanager上的任务的子JVM相同还是不同?
它表示给定集群中单个节点上的资源(内存)。
容器
- 由节点管理器监督 资源管理器调度的
一个MR任务在这样的容器中运行。
一个节点上可以有多个容器(或者一个非常大的节点)
系统中的每个节点被认为是由多个最小内存大小(例如512MB或1gb)的容器组成的。ApplicationMaster可以请求任何容器作为最小内存大小的倍数。
来源,请参见ResourceManager/Resource Model。
"Container"这个词在YARN中有两种用法,
Container:表示已分配给ApplicationMaster的资源。ResourceManager负责向ApplicationMaster发布资源/容器。检查容器API。
启动容器:基于分配的资源(容器)ApplicationMaster请求NodeManager启动容器,导致在一个节点上执行task。检查ContainerManager API
容器是工作单元发生的地方。例如,每个MapReduce任务(不是整个作业)在一个容器中运行。
应用程序/作业将在一个或多个容器上运行。
为每个容器分配一组系统资源,目前支持CPU内核和RAM。Hadoop集群中的每个节点可以运行多个容器。
在Hadoop中JobTracker为每个MapReduce任务分配一个槽位。然后TaskTracker为每个任务生成一个单独的JVM(除非JVM重用没有启用)。
简单来说,容器是运行YARN应用程序的地方。它在每个节点中都可用。应用程序主与调度程序(资源管理器的组件之一)协商容器。容器由Node Manager启动
根据输入数据的大小,创建多个输入分割。MR作业需要处理整个数据,因此创建了多个任务(map &减少任务)。因此,对于每个输入拆分将由一个任务处理。现在如何运行这个任务,由资源管理器给出建议。资源管理器知道哪个节点管理器空闲,哪个节点管理器忙,就像大学校长和节点管理器是大学的班主任,校长知道哪个老师空闲。因此,它要求节点管理器在容器中运行该任务(整个作业的一小部分),即jvm的内存区域。因此作业在容器内作为应用程序主机运行。
Container为资源分配,是ResourceManager授予特定ResourceRequest的成功结果。容器授予应用程序在特定主机上使用特定数量的资源(内存,cpu等)的权限。
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>
容器是应用程序运行其任务的地方。如果你想知道总数是多少。在集群中运行容器,然后你可以检查你的集群Yarn-Resource manager UI。
Yarn URL: http://Your-Active-ResourceManager-IP:45020/cluster/apps/RUNNING
在"正在运行的容器"一栏中,总编号为。
注意:如果您使用的是spark,那么spark执行器将在容器内运行。一个容器可以容纳多个spark执行器