Hadoop中Combiner的作用

 1.Partition     

把 Map任务输出的中间结果按 key的范围划分成 R份( R是预先定义的 Reduce任务的个数),划分时通常使用hash函数如: hash(key) mod R,这样可以保证某一段范围内的key,一定是将会由一个Reduce任务来处理,这样可以简化 Reduce获取计算数据的过程。

 2.Combine操作     

在 partition之前,还可以对中间结果先做 combine,即将中间结果中有相同 key的 对合并成一对。combine的过程与 Reduce的过程类似,很多情况下就可以直接使用 Reduce函数,但 combine是作为 Map任务的一部分,在执行完 Map函数后紧接着执行的,而Reduce必须在所有的Map操作完成后才能进行。Combine能够减少中间结果中 对的数目,从而减少网络流量。

 3.Reduce任务从 Map任务结点取中间结果      

Map 任务的中间结果在做完 Combine和 Partition之后,以文件形式存于本地磁盘。中间结果文件的位置会通知主控 JobTracker,JobTracker再通知 Reduce任务到哪一个DataNode上去取中间结果。注意所有的 Map任务产生中间结果均按其 Key用同一个 Hash函数划分成了 R份,R个 Reduce任务各自负责一段 Key区间。每个 Reduce需要向许多个原Map任务结点以取得落在其负责的Key区间内的中间结果,然后执行 Reduce函数,形成一个最终的结果文件。

4.任务管道       

有R个 Reduce任务,就会有 R个最终结果,很多情况下这 R个最终结果并不需要合并成一个最终结果。因为这 R个最终结果又可以做为另一个计算任务的输入,开始另一个并行计算任务

原文地址:https://www.cnblogs.com/Mandylover/p/5229744.html