MapReduce框架原理之ReduceTask工作机制

 

 

一、Reduce Task 并行度决定机制

reduce task的并行度,也就是同时开启了几个reduce task。分为两种情况:

1、如果我们自己定义了分区器,我们能够确定自己的分区器能够形成几个物理分区,加入我们要生成5个分区,那么我们要再driver中设置与分区数量相等的reduce task数量:

//默认值是1,手动设置为5
job.setNumReduceTasks(5);

2、如果我们采用默认的分区器,也就是HashPartitioner,那么只需要根据实际情况在driver中设置若干个reduce task数量。默认的分区器非常智能,可以根据我们设置的reduce task数量产生相应的分区数量。

注意:
(1)如果reducetask=0,则表示没有reduce阶段,输出文件个数和map个数一致。
(2)reducetask默认数量为1,所以默认输出一个文件。
(3)如果数据分布不均匀,就有可能在reduce端产生数据倾斜。
(4)reducetask数量并不是任意设置的,要考虑业务需求。有些情况下需要计算全局结果,只能有一个reducetask。
(5)具体有多少个reducetask数量还需要考虑集群性能而定。
(6)如果分区数不是1,reducetask数量是1,则不执行分区过程,因为在maptask源码中执行分区的条件是reducenum数量大于1,不大于1肯定不执行。
(7)reduce task的数量并非越多越好,设置大量的reduce task数量可能会导致启动他们时间过长,造成矫枉过正,过犹不及。所以我们应该按照实际情况综合分析,设置合适的reduce task数量。

 

二、Reduce Task 工作机制

(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。

(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。

(3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。

(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值