map 阶段输出 和 reduce阶段的输出 本质区别


map 阶段输出 和 reduce阶段的输出 本质区别

其实,很容易理解,map 阶段的 combiner和 reduce 有些相似,所以其实 map 阶段是完全可以输出滴。

(Combiner是用reducer来定义的,多数的情况下Combiner和reduce处理的是同一种逻辑,所以job.setCombinerClass()的参数可以直接使用定义的reduce,当然也可以单独去定义一个有别于reduce的Combiner,继承Reducer,写法基本上定义reduce一样。让我们看一下,加入Combiner之前的处理结果)

红色参考地址:http://www.01yun.com/web/20130329/286636.html

但是: map 和 reduce 阶段输出有什么区别呢?

  1. map 是分发任务的过程,那么必然会存在很多小文件块,

    所以: 输出必然文件块多,但是性能好,因为不需要通过网络传输到 reduce

2. 那么 reduce 正好和 map 相反: 文件块会减少,但是性能会差一些,因为需要网络传输。


转载于:https://my.oschina.net/repine/blog/543446