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操作,这样,可以减少带宽的使用。

4、Shuffle过程

分为map端和reduce

map端:

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

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

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

reduce端:

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

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

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

扩展:

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

猜你喜欢

转载自blog.csdn.net/m0_37461645/article/details/84888279
今日推荐