45

YARN 中的容器是什么?它与节点管理器上的任务运行的子JVM相同还是不同?

4

9 回答 9

28

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

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

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

于 2013-01-16T21:29:45.363 回答
17

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

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

Source,请参阅 ResourceManager/Resource Model 部分。

于 2013-01-23T13:21:22.890 回答
8

在 YARN 中,“容器”一词在两种情况下使用,

Container:表示分配给ApplicationMaster的资源。ResourceManager 负责向 ApplicationMaster 发布资源/容器。检查容器API。

启动容器:根据分配的资源(容器)ApplicationMaster请求NodeManager启动容器,从而在一个节点上执行任务。检查ContainerManager API。

于 2013-07-30T18:58:17.163 回答
6

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

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

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

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

于 2015-08-06T18:39:58.573 回答
1

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

于 2014-09-29T06:21:29.927 回答
1

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

于 2017-09-11T05:45:34.270 回答
1

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

于 2019-04-01T12:05:31.270 回答
0

容器是应用程序运行其任务的地方。如果你想知道集群中运行容器的总数,那么你可以检查你的集群 Yarn-Resource manager UI。

纱线网址:http://Your-Active-ResourceManager-IP:45020/cluster/apps/RUNNING

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

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

于 2018-08-23T08:58:52.843 回答
0
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>
于 2016-11-27T20:43:11.643 回答