MapReduce
mapreduce分为两个阶段:程序在每个节点上的计算和最终结果的汇总。
map阶段:
1)处理的数据比较大,而且数据都是分布存储在datanode中。
2)由于数据量比较大,而java程序比较小,所以将程序放到每一个数据节点上执行会节省数据传输的时间。而且可以实现并行计算,提高效率。
reduce阶段:
3)map阶段的数据需要汇总起来,做着部分工作的就是reduce。在其中一个节点上添加一个reduce程序,所有map程序的结果都汇总到这个节点上,由reduce程序进行处理。
4)由于map可能会比较多,一个reduce压力比较大,所以需要多加几个reduce,实现reduce的分布式,减少reduce的压力。
5)由于reduce有多个,所以又出现了节点上的map不知道汇总到哪个上的问题。所以就使用分区。分区的原则是每个reduce处理的数据基本一样