YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统的资源管理层。YARN已经有几个版本可供使用,但许多用户仍然有关于YARN是什么,它是什么以及它是如何工作的基本问题。
- 提供对构成YARN的组件的基本了解
- 说明MapReduce作业和spark作业如何适合YARN计算模型。
- 概述YARN调度程序的工作原理并提供调度程序配置的构建块示例
1. 集群基础知识
集群是由高速本地网络连接的两个或多个host(也称节点)。两个或多个host由高速本地网络连接的计算机在Hadoop术语中称为群集。从Hadoop的角度来看,集群中可以有数千个主机。在Hadoop中,群集中有两种类型的主机:
图1:master主机和worker作主机
从概念上讲,Master是客户端上程序的通信点。Master将工作发送到群集的其余节点,该群集由工作人员主机组成。(在Hadoop中,集群在技术上可以是单个主机。这样的设置通常用于调试或简单测试,不建议用于典型的Hadoop工作负载。)
2. ResourceManager和NodeManager
在YARN群集中,有两种类型的主机:
- ResourceManager是负责与客户端通信,对集群进行群集跟踪资源,把收到的任务编排给NodeManagers的master守护进程。
- NodeManagers是一个worker守护进程,负责启动和跟踪NodeManagers的工作进程。
图2:NodeManager和ResourceManager
3. YARN配置文件
YARN配置文件是包含属性的XML文件。此文件位于群集中每个主机上的已知位置,用于配置ResourceManager和NodeManager。默认情况下,此文件名为yarn-site.xml。用于配置YARN的此文件中的基本属性将在后面的部分中介绍。
4. YARN需要全局视图
YARN目前定义了两种资源,即vcores和内存。每个NodeManager跟踪自己的本地资源,并将其资源配置传递给ResourceManager,ResourceManager保持集群可用资源的总计。通过跟踪总数,ResourceManager知道如何在请求时分配资源。(Vcore在YARN中具有特殊含义。您可以将其简单地视为“CPU核心的使用份额”。如果您希望您的任务不那么占用CPU(有时称为I / O密集型),您可以设置vcores与物理核心的比率大于1,以最大限度地利用硬件资源。)
图3:ResourceManager的全局视图
5. Containers
Container是一个重要的YARN概念。您可以将Container视为在YARN群集上保存资源的请求。目前,Container保存请求由vcore和内存组成,如图4(左)所示。
图4:容器作为保留(左),容器作为运行过程(右)
一旦在主机上授予了保留,NodeManager就会启动一个称为task.的进程。图4的右侧显示了作为容器内的进程运行的任务。(第3部分将更详细地介绍YARN如何在特定主机上安排Container。)
6. ApplicationMaster
对于下一节,需要定义两个新的YARN术语:
- 一个应用程序是由一个或多个任务(参见图5)的yarn客户端程序。
- 对于每个正在运行的应用程序,一段称为ApplicationMaster的特殊代码可帮助协调YARN群集上的任务。ApplicationMaster是应用程序启动后运行的第一个进程。
在YARN群集上运行任务的应用程序包含以下步骤:
- 应用程序启动并与集群的ResourceManager对话:
图5:在将任务分配给集群之前启动应用程序
2. ResourceManager代表应用程序发出单个容器请求:
图6:集群上的Application +已分配容器
3. ApplicationMaster开始在该容器中运行:
图7:在集群上的容器中运行的Application + ApplicationMaster
4. ApplicationMaster从ResourceManager请求后续容器,这些容器被分配用于运行应用程序的任务。这些任务与步骤3中分配的ApplicationMaster进行大部分状态通信:
图8:在集群上运行的多个容器中运行的Application + ApplicationMaster +Task
5. 完成所有任务后,ApplicationMaster将退出。从集群中取消分配的最后一个容器。
6. 应用程序客户端退出。(在容器中启动的ApplicationMaster更具体地称为托管AM。非托管ApplicationMaster在YARN的控制之外运行.Llama是非托管AM的示例。)
7.MapReduce基础知识
在MapReduce范例中,应用程序由Map任务和Reduce任务组成。Map任务和Reduce任务与YARN任务非常干净地对齐。
图9:Application + Map tasks + Reduce tasks
8. MapReduce和YARN
图10说明了map任务和reduce任务如何完全映射到群集中运行的YARN任务概念。
图10:在群集上运行的合并MapReduce / YARN应用程序
在MapReduce应用程序中,有多个map任务,每个任务都在集群中某个worker主机上的容器中运行。同样,还有多个reduce任务,每个还在一个工作worker上的容器中运行。
同时在YARN端,ResourceManager,NodeManager和ApplicationMaster一起工作以管理集群的资源,并确保任务以及相应的应用程序完整地完成。
结论
总结本节中介绍的重要概念:
- 集群是由通过内部高速网络连接的两个或更多个主机。 Master主机是保留用于控制群集其余部分的少量主机。 Worker主机是群集中的Master主机。
- 在运行YARN的集群,Master进程称为ResourceManager,而Worker进程称为NodeManagers。
- YARN的配置文件名为yarn-site.xml。群集中的每个主机上都有一个副本。ResourceManager和NodeManager需要它才能正常运行。YARN跟踪群集,vcores和内存上的两个资源。每个主机上的NodeManager跟踪本地主机的资源,ResourceManager跟踪集群的总数。
- YARN中的容器包含群集上的资源。YARN确定群集中主机上的空间位置,以确定容器的保留大小。分配容器后,容器可以使用这些资源。
- YARN中的申请包括三个部分:
- 该应用程序客户端,表明一个程序在集群上怎么运行。
- 一个ApplicationMaster提供YARN代表应用程序的执行分配资源的能力。
- 在YARN分配的容器中执行实际工作(在进程中运行)的一个或多个任务。
欢迎关注微信公众号:冢虎大数