资源管理器如何为提交的作业分配容器?

How resource manager allocate container to the submitted job?

在 hadoop 1.X 中,我们在每个节点上都有几个固定大小的 jvm。在新版本中我们有容器,将在需要时创建。

我想知道资源管理器在提交作业的哪些参数上创建容器?

根据文档,YARN 旨在允许单个应用程序(通过 ApplicationMaster)以共享、安全和多租户的方式利用集群资源。此外,它仍然了解集群拓扑,以便有效地调度和优化数据访问,即尽可能减少应用程序的数据移动。

为了实现这些目标,中央调度程序(在 ResourceManager 中)拥有有关应用程序资源需求的大量信息,这使其能够在集群中的所有应用程序中做出更好的调度决策。这将我们引向 ResourceRequest 和生成的 Container。

本质上,应用程序可以通过 ApplicationMaster 请求特定的资源请求,以满足其资源需求。 Scheduler 通过授予容器来响应资源请求,这满足了 ApplicationMaster 在初始 ResourceRequest 中提出的要求。

你可能知道,我们在YARN中有三种调度方式:

  • 公平调度程序
  • 容量调度程序
  • FIFO 调度程序

他们每个人都有自己的方法来计算应用程序资源需求。

例如,CapacityScheduler 具有 ResourceCalculator 的概念——一个可插入层,用于通过查看所有已识别的资源来执行分配数学计算。这包括帮助做出以下决定的实用程序:

  • 这个节点是否有足够的每种资源类型的资源来满足这个请求?
  • 我可以在这个节点上容纳多少个容器,对具有不同可用资源的节点列表进行排序。 YARN 目前有两种计算器——DefaultResourceCalculator 和 DominantResourceCalculator。

DefaultResourceCalculator 在进行计算时只考虑内存。这就是为什么默认情况下在 CapacityScheduler 中执行分配时忽略 CPU 要求的原因。分配的所有数学运算都简化为仅检查资源请求所需的内存以及在特定调度周期期间正在查看的节点上可用的内存。