YARN框架解析

来源:互联网 发布:mac office2016破解版 编辑:程序博客网 时间:2024/06/07 02:55

 YARN框架

Yarn是资源管理框架,其核心思想是把JobTracker的资源管理和作业调度分开,分别由ResourceManager和ApplicationMaster进程实现

Yarn的4大核心组件分别为ResourceManager、NodeManager、ApplicationMaster和Container

(1)     ResourceManager(RM):控制集群并管理应用程序对基础资源的分配。

总体而言RM具有以下特征:

      1)处理客户端请求

         2)启动或监控ApplicationMaster

1) 监控NodeManager

2) 资源的分配与调度

(2)      ApplicationMaster(AM):管理在Yarn内运行的每个应用程序实例

总体而言AM具有以下特征:

1)负责数据的切分

       2)为应用程序申请资源并分配给内部的任务

1) 任务的监控与容错

(3)      NodeManager(NM):管理Yarn集群中的每个节点

总体而言NM具有以下特征:

1) 管理每个节点的资源

2) 处理来自ResourceManager的命令

3) 处理来自ApplicationMaster的命令

(4)      Container:对Yarn中资源的抽象

总体而言Container具有以下作用:

对任务运行环境进行抽象,封装CPU,内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息

Yarn作业运行的步骤:

1.     作业提交:

1) Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业

2) 作业ID由ResourceManager分配

3) 作业的Client核实作业的输出,计算输入的split,将作业的资源(Jar包,配置信息,split信息)拷贝至HDFS

4) 调用ResourceManager.submitApplication()提交作业

2.     作业初始化

1) ResourceManager收到submitApplication()的请求后,便将请求转发给调度器(Scheduler),调度器分配container,ResourceManager在该Container中启动ApplicationMaster

2) ApplicationMaster创建bookkeeping对象监控作业的进度,得到任务的进度以及完成报告

3) 由HDFS得到客户端计算好的split信息,为每个split创建map任务,根据mapreduce.job.reduces创建reduce任务

3.     任务分配

若作业很小,ApplicationMaster会选择在自己的JVM中运行任务

若作业不小,则ApplicationMaster向ResourceManager请求container运行所有的map和reduce任务,这些请求通过心跳来传输,包括每个map任务的数据位置,比如存放split的主机名和机架,调度器(schedule)利用·这些信息调度任务,尽量把任务分配给提供给存放split的节点或者分配给和存放split节点相同机架的节点上

4.     任务运行

当任务由ResourceManager的Schdule分配给一个container后,ApplicationMaster联系NodeManager启动Container,任务运行前首先需要本地化任务所需的资源,比如作业配置,JAR文件,以及分布式缓存中的所有文件,最后运行Map或者Reduce任务 ,YarnChild运行在专用的JVM,但Yarn不支持JVM重用

5.     进度和状态更新

Yarn中的任务将其进度和状态返回给ApplicationMaster,客户端每秒向ApplicationMaster请求进度更新

6.     作业完成

客户端每5分钟通过调用waitForCompletion()检查作业是否完成,时间间隔可以配置,作业完成后ApplicationMaster和Container清理工作状态,OutputCommiter的作业清理也会调用,作业的信息会被作业历史服务器存储以备用户检查