Hadoop 什么是纱线容器?

Hadoop 什么是纱线容器?,hadoop,mapreduce,yarn,Hadoop,Mapreduce,Yarn,什么是纱线容器?它与nodemanager上运行任务的子JVM相同还是不同?它表示给定集群中单个节点上的资源(内存)。 一个容器是 由节点管理器监督 由资源管理器安排 一个MR任务在这样的容器中运行。一个节点上可以有多个容器(或一个非常大的容器) 系统中的每个节点都被视为由多个最小内存大小(比如512MB或1GB)的容器组成。ApplicationMaster可以请求任何容器作为最小内存大小的倍数 ,请参阅ResourceManager/Resource Model一节。在两种上下文中,纱线

什么是纱线容器?它与nodemanager上运行任务的子JVM相同还是不同?

它表示给定集群中单个节点上的资源(内存)。
一个容器是

  • 由节点管理器监督
  • 由资源管理器安排

一个MR任务在这样的容器中运行。

一个节点上可以有多个容器(或一个非常大的容器)

系统中的每个节点都被视为由多个最小内存大小(比如512MB或1GB)的容器组成。ApplicationMaster可以请求任何容器作为最小内存大小的倍数


,请参阅ResourceManager/Resource Model一节。

在两种上下文中,纱线中使用了“容器”一词

容器:表示分配给应用程序管理员的资源。ResourceManager负责向应用程序管理员发布资源/容器。检查API


启动容器:基于分配的资源(容器),ApplicationMaster请求NodeManager启动容器,从而在节点上执行任务。查看API。

简单来说,容器是运行纱线应用程序的地方。它在每个节点中都可用。应用程序主控程序与调度程序(资源管理器的组件之一)协商容器。容器由节点管理器启动。

在Hadoop 2.x中,容器是工作单元发生的地方。例如,每个MapReduce任务(不是整个作业)都在一个容器中运行

应用程序/作业将在一个或多个容器上运行

为每个容器分配一组系统资源,目前支持CPU核心和RAM。Hadoop集群中的每个节点都可以运行多个容器

在Hadoop1.x中,JobTracker分配一个插槽来运行每个MapReduce任务。然后TaskTracker为每个任务生成一个单独的JVM(除非未启用JVM重用)

资源的逻辑租用和节点上产生的实际进程可以互换使用。 这与任务(或AM)运行的过程相同。 为了启动容器,我们提供了容器对象和CLC(ContainerLaunchContext),在其中我们设置了运行任务(或AM)的命令列表

nmClient.startContainer(容器,clcObj)
ContainerLaunchContext代码段:

.
.
.
/**
*添加用于启动容器的命令列表。全部的
*在添加新列表之前,将清除预先存在的列表项
*@param commands用于启动容器的命令列表
*/
@公开的
@马厩
公共抽象命令(列表命令);

根据输入数据的大小,创建多个输入拆分。MR作业需要处理整个数据,以便创建多个任务(映射和减少任务)。因此,对于每个输入,分割将由一个任务处理。现在,资源管理器建议如何运行此任务。资源管理器知道哪个节点管理器是空闲的,哪个节点管理器是忙的,它就像学院的校长和节点管理器一样是学院的班主任,校长知道哪个老师是空闲的。因此,它要求节点管理器在容器(即内存区域)中运行该任务(整个作业的一小部分),例如jvm。因此,作业作为容器内的应用程序主控程序运行。

容器是应用程序运行其任务的地方。 如果您想知道集群中正在运行的容器的总数,那么可以检查集群资源管理器UI

纱线网址:

在“运行容器”列中,显示运行容器的总数详细信息


注意:如果您使用的是spark,则spark执行器将在容器内运行。一个容器可以容纳多个spark执行器。

该容器是资源分配,它是ResourceManager授予特定ResourceRequest的成功结果。容器授予应用程序在特定主机上使用特定数量资源(内存、cpu等)的权限。

MR任务不在此类容器中运行。它在一组容器上运行,因为每个map或reduce函数都在一个容器上运行。一个任务可以在一个容器上以uber模式运行,但通过
MRAppMaster
,一个任务通常跨越数百或数千个容器。另外,一个容器由一个丰富的资源向量描述,并不代表唯一的内存。谢谢你指出这一点,你是对的,我更新了答案。然而,当我大约两年前回答这个问题时,容器只表示内存资源。容器和执行器之间的关系是什么?每个执行器是否在一个容器中运行?谢谢实际上,最初的定义是正确的。MR作业包含一组任务,每个任务在一个容器中运行。AFAIK,ApplicationMaster可以请求任何大小的任务,但Thread Scheduler仅分配为Thread.Scheduler.minimum*属性类中定义的最小内存大小的倍数。
Container : 
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>