MapReduce是采用一种分而治之的思想设计出来的分布式计算框架,主要被应用于搜索领域,解决海量数据的计算问题。MapReduce由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算。
1、Map阶段
map task的map()函数以key-value对作为输入,产生一系列kv对作为中间输出写入本地磁盘。
2、Reduce阶段
reduce()函数通过网络将map的输出(kv对)作为输入,产生另一系列kv对作为最终输出写入到hdfs,这时的key-value对是计算结果。
MapReduce的优点:
1)易于编程
MapReduce只需简单地实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机上运行。
2)良好的可扩展性
当计算机资源得不到满足的时候,可以通过简单的增加机器来扩展它的计算能力。
3)高容错性
比如一台机器挂了,可以把它上面的计算任务转移到另一个节点上运行,不至于整个任务运行失败,而且这个过程不需要人工干预,完全由hadoop内部完成。
4)高吞吐量
能对PB量级以上海量数据进行离线处理,适合离线处理而不适合实时处理。
MapReduce执行步骤:
1、map任务处理
(a)读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
(b)写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
2、reduce任务处理
(a)在reduce之前,有一个shuffle的过程对多个map任务的输出进行合并、排序。
(b)写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
(c)把reduce的输出保存到文件中。