【问题标题】:What is a container in YARN?YARN 中的容器是什么?
【发布时间】:2012-12-31 04:10:20
【问题描述】:

YARN 中的容器是什么?是和nodemanager上的任务运行的子JVM一样还是不一样?

【问题讨论】:

    标签: hadoop mapreduce hadoop-yarn


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:
            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>
            

            【讨论】:

              【解决方案6】:

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

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

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

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

              【讨论】:

                【解决方案7】:

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

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

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

                【讨论】:

                • MR 任务不在这样的容器中运行。它运行在一组容器上,因为每个 map 或 reduce 函数都运行在一个容器上。一个任务可以在一个容器上以 uber 模式运行,但一个任务通常通过MRAppMaster 跨越数百或数千个容器。此外,由丰富的资源向量描述的容器并不只代表内存。
                • 感谢您指出这一点,您是对的,我更新了答案。然而,当我或多或少在 2 年前回答这个问题时,容器仅代表一种内存资源。
                • 容器和执行器之间是什么关系?每个执行程序是否在一个容器中运行?谢谢!
                • 其实原来的定义是正确的。一个 MR job 包含一组任务,每个任务在一个容器中运行。
                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

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

                  Source,参见资源管理器/资源模型部分。

                  【讨论】:

                  • AFAIK,ApplicationMaster 可以请求任何大小,但 Yarn Scheduler 仅分配为 yarn.scheduler.minimum* 类属性中定义的最小内存大小的倍数。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-12-17
                  • 2022-11-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多