MapReduce 是一种简化并行计算的编程模型,用于大数据量的计算。它的核心思想是“分散任务,汇总结果”,将大规模数据集的操作分发给一个主节点管理下的各个子节点共同完成,然后整合各个子节点的中间结果,从而得到最终结果。
MapReduce的优点:
1、便于编程:MapReduce 只需简单地实现一些接口,便可以完成完成一个分布式程序。
2、拓展性:可以通过添加机器来拓展它的计算能力。
3、高容错性:当节点挂机,可以将计算任务转移到另外一台节点上进行。
4、对大量级的数据进行离线处理。
缺点:
1、实时计算差
2、不支持流式计算,数据源必须是静态的
MapReduce 编程模型
MapReduce 由两个阶段组成:Map 和 Reduce
Map 阶段由一定数量的Map Task 构成
1、输入数据格式解析:InputFormat
2、输入数据处理:Mapper
3、数据分组:Partitioner
Reduce 阶段由一定数量的Reduce Task组成
1、数据远程拷贝(从 Map Task 的输出拷贝部分数据)
2、数据按照key排序分组,可以相同的都存放在一起,按照key 进行分组,每一组交给Reducer进行处理。
3、数据处理:Reducer
4、数据输出格式:OutputFormat(输出的文件格式、分隔符的设置)
用户只需编写map()和reduce() 两个函数,即可完成简单的分布式程序的设计。
map()函数以key/value对作为输入,产生一系列的key/value对作为中间结果写入到本地磁盘。MapReduce 框架会自动将这些中间数据按照key值进行聚集(默认是对key的hash值取模),相同key值的数据会被统一交给reduce()函数进行处理。
reduce()函数以key 对应的value 列表作为输入,经合并key 相同的value 值后,产生一系列的key/value 对作为最终输出写入到HDFS。