底层架构 Synchnorized Transformer 后端面试 angularjs cookies linktosql npm安装vue mac虚拟打印机 datetimepicker赋值 ajax里面可以嵌套ajax吗 wordpress本地建站 oracle查看所有数据库 kubernetes集群 python输入输出 pythoninput python抛异常 python中不等于 java集合 java教材 java8教程 java对象和类 java中基本数据类型 java替换字符 java获取当前年月 java输出数组 java获得当前日期 java判断文件是否存在 js删除节点 stl2stp ABViewer 跑马灯动态壁纸 linux解压命令 脚本语言 camworks su镜像 快剪辑怎么录制视频 cad打散 联表查询 企业路由器设置
当前位置: 首页 > 学习教程  > 编程语言

MapReduce框架原理之ReduceTask工作机制

2020/9/19 16:25:47 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

 

 

一、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上。


本文链接: http://www.dtmao.cc/news_show_200420.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?