Hadoop学习——MapReduce

1、MR执行流程

作业的提交

1)启动客户端Client,运行Job;

2)客户端向资源管理器(ResourceManager)提交任务,请求一个新的ID号;

3)客户端将Job所需的资源发送给HDFS;

4)客户端向RM提交作业;

作业的初始化

5)RM将作业请求发送给Yarn调度器(Scheduler),调度器给作业分配容器,然后在该容器中启动Application Master;

6)NodeManager接受任务的进度和完成报告;

7)Application Master接受来自HDFS的在客户端计算的输入分片;

作业的分配

8)在执行过程中,若有不合适的容器,便会再次向ResourceManager申请容器;

作业的执行

9)启动容器;

10)从HDFS中读取Job需要的作业的配置、JAR文件、文件等资源,即资源本地化;

11)运行MR;

进度和状态的更新

作业的完成

作业完成后,会把作业的状态设置为“成功”

2、Partition的作用

分区操作时shuffle中的重要的一个过程,作用就是将Map端的结果按照指定的规则分发到不同Reduce端进行处理,默认是使用hash计算分区,但是也可以自行定义分区规则。

3、Combiner的作用

在Map中可能产生大量的结果,让Reduce直接去读取Map产生的结果会导致网络带宽增高,为此,可以再Map端进行Combiner操作,Combiner实际上就是运行在Map端的Reducer操作,这样,可以减少带宽的使用。

(以下红色部分是微博易的一位很好的大哥告诉我的,非常感谢)

请记住:符合交换律和结合律的可以使用Combiner进行减少带宽压力,

例如:a+b+c+d,无论怎么交换顺序,结果不会改变;而   \frac{\frac{a+b}{2} + \frac{c+d}{2}}{2} != \frac{a+b+c+d}{2}

 

什么时候运行Combiner?
1、当job设置了Combiner,并且spill的个数到min.num.spill.for.combine(默认是3)的时候,那么combiner就会Merge之前执行; 
2、但是有的情况下,Merge开始执行,但spill文件的个数没有达到需求,这个时候Combiner可能会在Merge之后执行; 
3、Combiner也有可能不运行,Combiner会考虑当时集群的一个负载情况。如果集群负载量很大,会尽量提早执行完map,空出资源,所以,就不会去执行。
--------------------- 
作者:李国冬 
来源:CSDN 
原文:https://blog.csdn.net/scgaliguodong123_/article/details/46483455 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

4、Shuffle过程

分为map端和reduce

map端:

每个mapper任务都有一个环形的内存缓冲区,用于存储map任务的输出,默认是100MB,一旦达到阈值0.8,后台线程就把内容溢写(spill)到磁盘指定目录下生成新的溢写文件;

写磁盘前,要进行分区(Partition),每个分区中排序(Sort),排序后合并(Combiner);在写磁盘时,还会进行任务的输出,此时可能导致两种情况:要不就是磁盘写出已完成,不会影响到后续任务的输出;要不磁盘写出未完成,导致mapper阻塞;

等全部记录写完后,合并所有的溢出文件,若被合并后的文件个数大于等于设定值(默认为3),则再次合并,直到小于设定值。

reduce端:

Reduce主动去找自己负责的分区的数据;

复制来自多个Mapper的数据后进行merge合并操作,合并后,进行分组、排序;

在reducer中进行处理上述的数据结果,并将最终结果输出到指定目录

扩展:

mapper一般执行输入格式解析、投影(选择相关的字段)和过滤(去掉无关记录)

 

给张剖析MapReduce作业运行机制的图(摘录自《Hadoop权威指南》)

Hadoop学习——MapReduce_第1张图片

你可能感兴趣的:(Hadoop学习,面试准备)