1.MapReduce简介
一 MapReduce是一种分布式计算模型.是由Google提出的,主要是解决海量数据的计算。
二 MapReduce主要分为两个阶段:Map和Reduce,用户只需实现map()和reduce()即可实现分布式计算.
2.MapReduce实现流程
3.MapReduce原理
解析:
1.阶段是Map阶段:
1.1 读取HDFS中的文本.将每一行都解析成一个个<k,v>.每个键值对抵用一次map()函数。
1.2 接收1.1产生的<k,v>进行处理,产生新的<k,v>
1.3 对1.2中的<k,v>进行分区
1.4对不同的分区的数据进行分组,排序.分组:相同key的数据value放在一个集合中
1.5 对分组后的数据进行归约 combiner
2.Reduce阶段:
2.1 Copy阶段:Reduce通过HTTP的方式得到处文件的分区
reduce端可能有从n个map的结果中获取数据,从而这些map的执行速度不相同,当其中的一个map执行结束时,reduce就会向JobTracker中获取信息.TaskTracker就会得到消息,进而将消息汇报给jobTracker
reduce会定时从jobTracker获取信息,reduce端默认有5个复制线程从map端复制数据。
2.2 Merge阶段:
从map端复制来的数据写入reduce端的缓存中,同样缓存占到一定的阀值后会将数据写到磁盘中。同样会进行partition.combiner.sort等过程。如果形成的有多个磁盘文件则进行合并,最后一次合并的结果作为reduce端的输出。
2.3 Reduce的参数:
将2.2的合并的结果输入到reduceTask任务中
MapReduce的原理:
combiner节点处理的是将同的一个map的相同的键值进行合并.避免重复传输,从而减少了I/O开销.
partitioner节点负责将map的产生的结果进行划分,确保相同的key分发到同一个reduce中.