YARN
1,YARN 概念
YARN(Yet Another Resource Negotiator)是自 Hadoop2.0 之后引入的一个新组件,统一负责集群的资源调度和管理,为 MapReduce 程序分配运算资源。
2,YARN 组件
YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。
- ResourceManager
作为资源管理的核心组件,通常单独部署在一个节点。负责为 client 提交的 job 分配资源,策略是根据应用优先级,队列容量、位置信息等,以共享、安全、多租户的方式提供资源调度服务。
- NodeManager
该组件负责每个节点的管理。包括节点内所有容器的生命周期管理、资源监控、健康跟踪。
- ApplicationMaster
client 提交一个任务后,由 YARN 负责向 ResourceManger 申请一个 ApplicationMaster 轻量级线程,具体负责和 ResourceManger 的资源协调,同时监控 NodeManager 资源和运行情况,负责容错处理。根据任务的不同,有 MapReduce ApplicationMaster 和 Giraph ApplicationMasrer 之分。
- Container
Conotainer 是 YARN 中一种资源抽象,它封装了节点上的内存、磁盘、网络等资源。
3,运行机制
根据上面的描述,RM 和 NM 更多的是一个管理者的角色,执行任务的主要是 AM。所以我们这里详细介绍一下 MRApplicationMaster的运行过程。
(一)作业提交阶段
客户端提交任务到集群,YarnRunner 向 ResourceManager 申请一个 Application;任务程序将资源拷贝到 HDFS,提交完毕后申请运行 MRApplicationMaster;
(二)作业初始化阶段
ResourceManager 将请求初始化为 Task,并由调度器(scheduler)分配 container,在 container 内启动应用管理器,启动一个 ApplicationMaster;
(三)任务分配阶段
MRApplicationMaster 从客户端得到计算好的 Spilt 信息,并为之创建对应的 Map 任务以 Reduce 任务;任务优先在本地 JVM 中执行,资源不够时通过心跳机制向 ResourceManager 申请ResourceManager 指定其他的 NodeManager 领取任务创建 Container;
(四)任务执行阶段
NodeManager 创建 Container 并由节点管理器启动 Container ,在 Container 内部由一个 YarnChild 的 Java 应用具体执行 map 或 reduce 任务;
(五)进度和状态维护阶段
YARN 中的任务将其进度和状态返回给应用管理器, 客户端每秒(mapreduce.client.progressmonitor.pollinterval
)向应用管理器请求进度更新, 展示给用户。
(六)作业清理阶段
除了向应用管理器请求作业进度外, 客户端每 5 分钟都会通过调用 waitForCompletion() 来检查作业是否完成。时间间隔可以通过 mapreduce.client.completion.pollinterval
来设置。作业完成之后, 应用管理器和 container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。