以wordcount 为例
https://blog.csdn.net/weixin_43291055/article/details/106488839
步骤一:split
步骤二:map阶段
步骤三:combine阶段(可选)---将同一台机器上的相同的数据进行合并,减少网络传输
combiner其实也是一种reduce操作,因此我们看见WordCount类里是用reduce进行加载的。Combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作,例如我们对文件里的单词频率做统计,map计算时候如果碰到一个hadoop的单词就会记录为1,但是这篇文章里hadoop可能会出现n多次,那么map输出文件冗余就会很多,因此在reduce计算前对相同的key做一个合并操作,那么文件会变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输入,例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。
平均值不能用combine的原因:不能直接使用reduce
平均值的计算:https://blog.csdn.net/yapuge/article/details/24373063
步骤四:shuffle阶段
https://www.jianshu.com/p/c2a5468f0c5c
步骤五:reduce
参考:
https://www.jianshu.com/p/c2a5468f0c5c
https://blog.csdn.net/shujuelin/article/details/79119214