首页 > 其他 > 详细

MapReduce(三)Reducer

时间:2021-06-16 22:26:02      阅读:40      评论:0      收藏:0      [点我收藏+]

原文链接:
https://data-flair.training/blogs/hadoop-reducer/

技术分享图片

1、什么是Reducer?

Reducer处理Mapper的输出,在处理完以后它会输出一些数据,这些输出会存储到HDFS上。

Reducer接收一个key-value对的集合作为输出,然后对集合中的每个kv对使用Reducer函数来处理。Reducer可以聚集,过滤,合并这些数据。Reducer首先处理mapper生成的中间数据然后生成输出(0或者多个kv对)。

key和Reducer是一对一的关系。多个Reducer可以并行执行,因为他们是相互独立的。Reducer的数量由用户指定,默认情况下Reducer的数量为1.

2、Reducer的阶段

如上图所示,Reducer一共分成3个阶段。

2.1、 Shuffle阶段

这个阶段,mapper输出的已经排好序的数据将作为Reducer的输入。在Shuffle阶段,基于HTTP,框架会从所有的mapper中的相应的分区拉取数据(给Reducer)。

2.2、Sort阶段

在这个阶段, 已经排好序mapper的输出数据会通过归并排序成一个大的文件(作为Reducer的输入)。shuffle和sort阶段是并发执行的。

2.3、Reduce阶段

这个阶段,在shuffle和sort之后,reduce任务会聚集kv对。OutputCollector.collect() method会将reduce的输出写入文件系统中。Reducer的输出结果不会排序。

3、Reducer的数量

这一个小节我们将讨论一个任务需要多少Reducer,以及如何修改Reducer的数量。

基于Job.setNumreduceTasks(int),用户可以设置一个job的Reducer的数量。合适的数量是这么计算出来的:0.95或1.75乘以 (<no. of nodes> * <no. of the maximum container per node>).

当是0.95是,所有Reducer会立刻启动,然后开始传输已经完成任务的mapper的数据。
With 0.95, all reducers immediately launch and start transferring map outputs as the maps finish.

当是1.75时,第一轮的Reducer会在快速的节点上执行,and second wave of reducers is launched doing a much better job of load balancing.

MapReduce(三)Reducer

原文:https://www.cnblogs.com/ralgo/p/14890277.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!