MapReduce的过程

来源:互联网 发布:python 垃圾回收 阈值 编辑:程序博客网 时间:2024/05/19 00:36

在MapReduce的过程中,一个作业被分成map和reduce计算两个阶段,他们分别由一个或者多个map任务和reduce任务组成,如下图所示,一个MapReduce作业从数据的流向可以被切分为Map任务和Reduce任务。Reduce任务默认在Map任务数量完成5%后才开始启动。
这里写图片描述

1. input
如果使用HDFS上的文件作为输入,mr计算框架会首先用InputFormat类的子类FileInputFormat类讲作为输入的文件切分成输入分片(InputSplit)。
InputSplit只是逻辑上对输入的数据进行切分,并不会将文件在磁盘上切分成分片进行存储。其只记录了分片的元数据节点信息,例如起始位置,长度以及所在的节点列表等。FileInputFormat类使用computeSplitSize方法计算InputSplit的大小:

protected long computeSplitSize(long blockSize, long minSize, long maxSize){    return Math.max(minSize,Math.max(maxSize,blockSize));}

minSize默认为1,maxSize默认为9223372036854775807,所以,如果使用默认配置,分片的大小就和数据块的大小相等(64MB)。应尽量使分片的大小和块的大小相同以提高map任务计算的数据本地性。
当输入文件被切分为分片之后,由FileInputFormat的子类的createRecordReader方法将InputSplit解析成键值对,默认是将行号作为键,解析出来的键值对将用来作为map函数的输入。
2. map及中间结果的输出

InputSplit将解析好的键值对交给map函数处理,处理后的中间结果会写到本地磁盘,在刷写磁盘的过程中,还做了partition(分区)和sort(排序)的操作。

这里写图片描述
每个map任务都有一个内存缓冲区,用于存储map函数的输出,默认大小为100M,如果达到阈值,一个后台线程会将缓冲区的内容溢写进磁盘,在写磁盘过程中,map函数的输出会继续被写到缓冲区,如果在此期间缓冲区被填满,map会阻塞知道写磁盘过程完成。
在写磁盘之前,线程会默认按照键来进行分区,在每个分区中,后台线程按键进行内排序。
一旦内存缓冲区达到溢出的阈值,就会新建一个溢出写文件,因此在map任务写完其最后一个输出记录之后,会有若干个溢出写文件。在map任务完成之前,溢出写文件会被合并成一个已分区且已排序的输出文件作为map输出的中间结果,也是map任务的输出结果。
3. shuffle

shuffle,也叫数据混洗,代表map函数产生的输出到reduce的消化输入的整个过程。

map任务的输出结果位于运行map任务的Nodemanager所在的节点的本地磁盘上,NodeManager需要为这些输出文件运行Reduce任务,但是,Reduce任务可能需要多个Map任务的输出作为其输入。每个Map任务的完成时间不同,当只要有一个任务完成,Reduce任务就开始复制其输出。这就是shuffle中的copy阶段。
这里写图片描述
复制完所有的map输出,shuffle进入sort阶段,这个阶段将合并map的输出文件,并维持其顺序排序,其实做的就是归并排序。
4. reduce及最后结果的输出
reduce阶段操作的实质就是对经过shuffle处理的文件调用reduce函数处理,由于经过了shuffle的处理,文件都是按键分区且有序,对相同分区的文件调用一次reduce函数处理,其输出一般放到HDFS。
5. mapReduce中的sort

排序贯穿于map和reduce任务,排序操作是mapreduce的默认行为,不管是否需要,都会排序。在其中,主要有两种排序:快速排序和归并排序。

在map和reduce任务中,一共发生了3次排序操作。

  • 当map函数产生输出时,会首先写入内存缓冲区,当达到阈值时,在刷写磁盘之前,后台线程会将缓冲区的数据划分成相应的分区。在每个分区中,后台线程按键进行内排序(快速排序)。
  • 在map任务完成之前,磁盘上存在多个已经分好区,并排好序,大小和缓冲区一样的溢写文件,这时溢写文件将被合并成一个已分区且已排序的输出文件。由于溢写文件已经经过第一次排序,所以合并文件时只需要做一次排序就可以使输出文件整体有序(归并排序)。
  • 在shuffle阶段,需要将多个map任务的输出文件合并,由于经过第二次排序,所以合并文件时只需要在做一次排序就可以使输出文件整体有序(归并排序)。
    这里写图片描述
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 12306身份信息被注册怎么办 12306注册身份信息重复怎么办 12306账号被注册了怎么办 高铁账号忘记了怎么办 铁路12306网站密码错误怎么办 网上买火车票密码忘了怎么办 快递没收到点了确认收货怎么办 快递没收到自动确认收货怎么办 房地产股市汇率一齐暴跌怎么办 尼日利亚落地签过期了怎么办 期货亏光了所有怎么办 期货钱亏完了该怎么办 做黄金亏损500万怎么办 炒黄金被骗35万怎么办 淘宝发货填错单号怎么办 发货单号填错了怎么办 发快递忘了单号怎么办 国际物流查不到物流怎么办 纸币上印邪教该怎么办 钥匙掉到电梯缝里怎么办 汽车电子钥匙铜线折一根怎么办 防盗门的锁不好开怎么办 同学帮刷饭卡说不用还钱了怎么办 em231电源指示灯不亮怎么办 运行广联达卡住怎么办 马桶被粪便(大便)堵了怎么办 子宫壁厚12mm怎么办 管子太多每次洗澡都是冷水怎么办 热水冷水装反了怎么办 大树被高锰酸钾灌溉了怎么办会死吗 防盗门门被锁了怎么办 门被里面反锁了怎么办 门里面被锁了怎么办 被锁在门里怎么办 门锁住了没钥匙怎么办 车被别人锁住了怎么办 汽车轱辘被锁了怎么办 小车轮胎被锁了怎么办 国防光缆无明显标识被挖断怎么办 临工210挖掘机柴油进气怎么办 汽车抛光蜡干了怎么办