💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
1. **设置 ReduceTask 并行度(个数)** reducetask 的并行度同样影响整个 job 的执行并发度和执行效率,但与maptask 的并发数由切片数决定不同,<ins>Reducetask 数量的决定是可以直接手动设置</ins>: ``` //默认值是 1,手动设置为 5 job.setNumReduceTasks(5); ``` 2. **注意** (1)reducetask=0 ,表示没有 reduce 阶段,输出文件个数和 map 个数一致。 (2)reducetask 默认值就是 1,所以输出文件个数为一个。 (3)如果数据分布不均匀,就有可能在 reduce 阶段产生数据倾斜 (4)reducetask 数量并不是任意设置,还要考虑业务逻辑需求,有些情况下,需要计算全局汇总结果,就只能有 1 个 reducetask。 (5)具体多少个 reducetask,需要根据集群性能而定。 (6)如果分区数不是 1,但是 reducetask 为1,是否执行分区过程。答案是:不执行分区过程。因为在maptask的源码中,执行分区的前提是先判断reduceNum个数是否大于 1。不大于 1 肯定不执行。 3. **ReduceTask 工作机制** (1)Copy 阶段:ReduceTask 从各个 MapTask 上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。 (2)Merge 阶段:在远程拷贝数据的同时,ReduceTask 启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。 (3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个 MapTask 已经实现对自己的处理结果进行了局部排序,因此,ReduceTask 只需对所有数据进行一次归并排序即可。 (4)Reduce 阶段:reduce()函数将计算结果写到 HDFS 上。