朴素认识Map和Reduce

一、Map阶段一般做三件事情:

1. 切分输入
2. 变换输入为输出
3. 执行可选的Combine

PS: 
- 用不用Combine,一方面取决于数据的特征(重复Key的多寡);另一方面就是网络带宽(
网络速度很快时,Combine提高的性能有限,甚至不会提高性能 )。
- Map的幂等性( 相同的输入将产生完全相同的输出 )很重要,如果Map不是幂等的,两次运行的结果可能会有不同。 在现实中,实际上很难遇到不满足Map幂等性的情况,如果真出现了这种情况,绝大多数也是程序错误!所以,这个重要性,更多是理论上的意义。

二、Reduce阶段做三件事情:

1. shuffle
把各个Map进程产生的结果,按 i = Hash(Key, ReduceCount) 将记录分配给第 i 个Reduce进程。
2. sort
将每个Reduce进程原始输入(shuffle产生的)进行排序,将key相同的记录对应的value集中到一起,产生{key,[value]}。
3. reduce
读取{key,{value}},为每个(key,{value}),调用应用程序自定义的reduce函数。

Reference:http://febird.javaeye.com/blog/504926

reference:http://tlyxy228.blog.163.com/blog/static/1810901201051211755193/

你可能感兴趣的:(网络,reference,2010)