hadoop的mapreduce运行在yarn上的原理

mapreduce运行在yarn上步骤

1,client查看job输入输出参数,向resourcemanager发送ResourceRequest列表,每个ResourceRequest描述了一个资源单元的详细需求,请求一个Container
2,resourcemanager检查需求,通过的话返回一个jobid和一个用于提交资源的路径
3,
a、 client收到响应后,扫描输入目录,根据blockSize和minSize,maxSize以及文件
大小进行input split,形成若干切片放入arrayList中(逻辑切片),发送给HDFS;
b、将job中的参数写入HDFS;
c、将jar包上传给HDFS;
d、告知resourcemanager资源提交完毕;

4,
a、resourcemanager将任务加入队列,等待领取任务后,根据yarn-site配置在一台notemanager创建一个容器
b、该容器下载之前放在HDFS上的程序资源
5,这时client发送shell命令启动MRAppMaster进程

6,nodeManager收到客户端命令后启动MRAppMaster进程
至此这台notemanager开启了一个MRAppMaster进程,并且下载了jar, job.xml, job.split资源
7,MRAppMaster向resourcemanager请求多个Container,resourcemanager领取任务为其创建对应数量的maptask容器
8,maptask容器下载执行job需要的的程序资源
9,MRAppMaster向maptask容器发送命令,启动yarnchild进程,执行maptask
10,一旦有maptask执行完,MRAppMaster就会向resourcecmanager请求和启动reducetask所需Contain,
0容器根据map阶段的分区去下载自己的输入数据
11,当maptask执行完后,reducetask容器也就下载完了属于自己分区的输入数据
之后开始进行reduce操作,合并数据,分组聚合,输出结果到HDFS
12,当reducetask也执行完后,MRAppMaster也会跟着销毁,客户端也就执行完毕退出,结束

名词解释:

Container:Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。Container运行时需提供内部执行的任务命令,以及该命令执行所需的环境变量和外部资源(比如配置文件、jar包等)。MRAppMaster的容器是由客户端请求,resourcemanager资源调度器异步分配,客户端发送命令启动的。YarnChild的容器是由MRAppMaster申请,资源调度器异步分配,MRAppMaster启动的。
MRAppMaster:客户端请求的管理job任务的进程,负责申请和启动执行YarnChild容器,监控运行过程。
YarnChild:用来执行jar任务,maptask和reducetask都由YarnChild进程处理。mapreduce任务中,当一个maptask任务执行完后,MRAppMaster就会申请和启动新的容器执行reducetask,这样当maptask执行完成,reducetask也下载完了需要处理的分区数据。当reducetask任务也执行完,MRAppMaster也会销毁,客户端执行完毕,任务结束

mapreduce过详细过程

我给它分为这几步
input split:输入文件切片
map:执行map逻辑
part:结果分区
SortComparator:排序和分组 默认调用key.compareto
spill:结果输出方式,并将结果合并
combiner:结果初步reduce,可以提高性能,要求不影响最终结果,但不一定会执行
shuffle:map端结果分发给reduce
GroupingComparator:分组
reduce:执行reduce逻辑

———————————————————————————————————————————————————————-
input split阶段,切片是根据输入格式来切片,默认TextInputFormat,按行读取数据和分割(类型有6种,还有KeyValueInputFormat,SequenceFileInputFormat等),根据blocksize,minsize,maxsize的设置确定切片数,并结合maptask数的设置来设置map数,默认根据blocksize切片,map数=切片数。

map:一次读一行,返回一个k-v

part:对map的结果,默认根据设置的reducetask数进行分区,可以自定义分区类继承Partitioner实现getPartition方法,返回值为reducetask编号,必须小于或等于reducetask数
hadoop的mapreduce运行在yarn上的原理
hadoop的mapreduce运行在yarn上的原理
hadoop的mapreduce运行在yarn上的原理
SortComparator:根据key.compareto()进行排序,结束后相同的放在一起,实现初步分组,实现RawComparator接口可以自定义比较的规则
hadoop的mapreduce运行在yarn上的原理
所以要求自定义的bean做key值必须实现writableComparable接口

spill:其实是map结果输出阶段的储存方式,由于map阶段很占内存,所以为结果的输出创建一个环形缓存区,默认大小是100m,阈值为80,这两个参数都可以设置,超过80开始写入磁盘,最后将磁盘上的数据整合到一起,称为spill
hadoop的mapreduce运行在yarn上的原理

combiner:对结果进行初步的reduce,提前对结果进行一次整合,在不影响结果的前提下提高效率,可能会执行也可能不执行。如果当前集群在很繁忙的情况下job就算设置了也不会执行Combiner。

shuffle:map端结果分发给reduce端的过程,根据分区情况通知reducetask下载自己的输入数据

GroupingComparator:由于分区里的数据虽然顺序没变但又合到一起,需要比较相邻两个是否相同,默认把相同的放到一组。用WritableComparator的compare()判断相邻的两个key是否相等来实现,可以自定义GroupingComparator来自定义归并,实现RawComparator接口

reduce:执行业务逻辑

以上流程顺序和功能用debug测试得到的,有些源码没看明白就没截图,以后更新再补