【摘要】:Reduce任务是以某种方式把输入的一系列键值表中的值进行组合,输出键值对序列。所有Reduce任务的输出结果最终合并成单个文件。Reduce任务原理如图7-10所示。当Reduce函数满足交换律和结合律时,就可以将Reduce任务中的部分工作放到Map任务中来完成。Reduce将与一个Key关联的一组中间数值集化简为一个更小的数值集。用户可以在操作时设定一个作业中Reduce任务的数目。Reduce的数目建议是任务处理最大值与系数的乘积,系数可以选择0.95或1.75。
Reduce任务是以某种方式把输入的一系列键值表中的值进行组合,输出键值对序列。其中Reduce任务接收到的输入键是每个键值对中的Key,而接收到的与Key关联的值表的组合结果就是值。所有Reduce任务的输出结果最终合并成单个文件。Reduce任务原理如图7-10所示。
图7-10 Reduce任务原理(www.xing528.com)
通常Reduce函数都满足交换律和结合律,也就是说所有需要组合的值可以按照任务次序组合,其结果不变。当Reduce函数满足交换律和结合律时,就可以将Reduce任务中的部分工作放到Map任务中来完成。Reduce将与一个Key关联的一组中间数值集化简为一个更小的数值集。用户可以在操作时设定一个作业中Reduce任务的数目。
Reduce任务的输出通常是通过调用OutputCollector.collect(WritableComparable、Writable)写入文件系统,Reduce的输出是没有排序的。应用程序可以使用Reporter报告进度、设定应用程序级别的状态消息、更新计数器或者仅是表明自己运行正常。
Reduce的数目建议是任务处理最大值与系数的乘积,系数可以选择0.95或1.75。若使用0.95,所有Reduce可以在Map一完成时就立刻启动,开始传输Map的输出结果;若使用1.75,速度快的节点可以在完成第一轮Reduce任务后,可以开始第二轮,这样可以得到比较好的负载均衡的效果。虽然增加Reduce的数目会增加整个框架的开销,但可以改善负载均衡,降低由于执行失败带来的负面影响。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。