之前详细介绍了HDFS的运行机制:HDFS运行原理,今天介绍一下Hadoop中另外两个关键的组成部分:MapReduce和Yarn的运行机制。
首先普及一下概念:
HDFS:负责海量数据的存储
MapReduce:负责海量数据的分析和计算
Yarn:负责资源管理调度

一、Yarn运行机制

hadoop 行为轨迹分析 hadoop运行机制_yarn

一个MapReduce程序完成后,需要提交给yarn执行。具体的机制如下:

  1. Hadoop运行jar包,启动一个进程(RunJar),这个进程首先向Resource Manager申请执行一个job
  2. Resource Manager响应,返回job相关资源需存放的路径信息(如图中HDFS下/temp/…/yarn-staging/)及jobID。这样,job相关的资源将存放在这里。
  3. 于是,进程提交资源到HDFS指定路径下,如图所示。同时,向Resource Manager发送提交结果。
  4. 收到提交成功的结果后,Resource Manager会将本次job加入到任务队列,eg:红色所示为本次任务。
  5. Resource Manager将job分发给各个Node Manager,各个Node Manager领取任务。
  6. 同时,HDFS将与job相关的file resource发送给Node Manager下的container(分配运行资源的容器),Resource Manager根据job为container分配CPU和Memory。这一步称为:分配运行资源
  7. 分配完运行资源后,Resource Manager在某一个Node Manager上启动MRAppMaster(管理Map task和Reduce task,类似于MapReduce的主进程)
  8. MRAppMaster向Resource Manager注册,然后启动Map task进程,Map完,再启动Reduce Task进程(这两个进程名为:yarnChild)。
  9. job完成后,MRAppMaster向Resource Manager注销。

二、MapReduce运行机制

MapReduce的思想和函数式编程里Map和Reduce的思想差不多:函数式编程

Map将文件每一行解析成{Key,Value}对,对每一对{Key,Value}都调用Map函数。
Reduce则将Map的输出进行Merge。

1. split



hadoop 行为轨迹分析 hadoop运行机制_数据_02

split是map的输入文件。
split是一个逻辑的概念,指所处理数据的偏移量范围,即数据从哪个偏移量开始,到哪个偏移量结束(如0-100M为一个split,100-200M为一个split)。map task的并发数是由split的数量决定的,有多少个split,就启动多少个map task。

: split可以比blk大,也可以比blk小。


2. shuffle



MapReduce的流程体现在shuffle中


hadoop 行为轨迹分析 hadoop运行机制_mapreduce_03

  1. MRAppMaster启动map task。split输入到map中,map将数据打散,以 {Key,Value} 的形式输出,存放在内存中的buffer里。
  2. 当数据量超过buffer的大小,数据将会溢出到本地磁盘中。溢出时,会对数据进行分组、排序等操作。
  3. 如果本地磁盘中file1写满,则会写到file2中,但第1组数据仍然会插到partition1中,第2组数据仍然插到partition2中。
  4. 之后,将同组的数据进行merge(也会进行sort操作),然后输出。并向MRAppMaster汇报处理结果:output文件所在的位置,分组的信息等。
  5. MRAppMaster通知reduce task取哪一个分区的数据,以及数据的位置。 然后reduce task通过http方式下载map task输出的partition数据,一个reduce task获得一类partition。
  6. reduce task对数据进行merge(也会sort),之后对merge后的数据进行运算处理,并输出。