mapreduce yran执行详情

Yarn应用程序运行流程剖析

Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以支持其它的分布式应用。

Yarn本身提供了一系列API用于用户应用程序与集群资源进行交互,这些API复杂且晦涩难懂,用户通常不会直接使用。用户编制应用程序时,通常使用的是分布式计算框架(MapReduce、Spark)提供的高层次API,这些API构建在Yarn之上且隐藏资源管理细节,如下图所示:

 

mapreduce yran执行详情

 

MapReduce、Spark、Tez这样的计算框架均以Yarn应用程序的形式运行于集群计算层(Yarn)和集群存储层(HDFS或HBase)之上,而Pig、Hive、Crunch则运行于MapReduce、Spark或Tez之上,并没有与Yarn直接交互。

Yarn的核心服务由两个组件提供:

Resource Manager:每个集群一个实例,用于管理整个集群的资源使用;

Node Manager:每个集群多个实例,用于自身Container的启动和监测(每个Node Manager上可能有多个Container)。

注:根据Yarn配置的不同,Container可能是一个Unix进程或者一个Linux cgroup实例,在受限的资源范围内(如内存、CPU等)执行特定应用程序的代码。

 

运行流程

mapreduce yran执行详情

 

(1)Client请求Resource Manager运行一个Application Master实例(step 1);

(2)Resource Manager选择一个Node Manager,启动一个Container并运行Application Master实例(step 2a、step 2b);

(3)Application Master根据实际需要向Resource Manager请求更多的Container资源(step 3);

(4)Application Master通过获取到的Container资源执行分布式计算(step 4a、step 4b)。

 

具体运行流程如图:

mapreduce yran执行详情

大致流程:

 

1.首先Yarn客户端提交mr任务到集群 向Resource Manger申请一个application
2.ResourceManger会告诉application资源提交路径到 hdfs://user/.staging 以及application ID
3.创建yarnruner代理 提交job运行所需要的资源文件到路径 包含job.split  job.xml wc.jar
4.资源提交完毕.ResourceManger在那台机器上创建Container容器申请运行mrAppMaster
5.ResourceManger会将用户请求初始化成一个task
6.nodeManger领取到task任务创建容器实例mrAppMaster 
7.mrAppMaster会下载hdfs job资源到本地
8.mrAppMaster会查看需要多少个maptask容器 然后向ResourceManger申请,ResourceManger会把maptask放入FIFO调度队列里面
9.ResourceManger会找合适的机器的nodeManger来运行任务,nodeManger主动领取任务,创建容器
10.nodeManger程序启动脚本
11.maptask执行会生成文件,分区且排序完成后,会再向ResourceManger申请容器执行reducetak,默认是一个.
  根据partition决定reducetask数量(maptask执行会生成文件会被nodeManger管理,可以找nodemanger要,
  nodeManger配一个参数MapReduced_shuffle就是配合管理这些文件)
12.启动reducetask
13.reduce向map获取对应相应分区的数据 然后运行脚本
14.application运行完毕后,mrAppMaster会想ResourceManger注销自己