MapReduce是hadoop中的一个计算框架,用来处理大数据。所谓大数据处理,即以价值为导向,对大数据加工,挖掘和优化等各种处理。
MapReduce擅长处理大数据,这是由MapReduce的设计思想决定的“分而治之”。
1)Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:一是数据或计算的规模相对原任务要大大缩小;而是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小人物可以并行计算,彼此间几乎没有依赖关系。
2)Reducer负责对map节点的结果进行汇总。至少需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1.
MapReduce框架运转在<key,value>键值对上,也就是桌,框架把作业的输入看成是一组<key,value>键值对,通用也产生一组<key,value>键值对作为作业的输出,这两组键值对有可能是不同的。
论文:http://www.allendowney.com/ss08/handouts/dean08mapreduce.pdf
Map阶段:首先是读数据,数据来源可能是文本文件,表格,MySQL数据库。这些数据通常是成千上万的文件(叫做shards),这些shards被当做一个逻辑输入源。然后Map阶段调用用户实现的函数,叫做Mapper,独立且并行的处理每个shard。对于每个shard,Mapper返回多个键值对,这是Map阶段的输出。
Shuffle阶段:把键值对进行归类,也就是把所有相同的键的键值对归为一类。这个步骤的输出是不同的键和该键的对应的值的数据流。
Reduce阶段: 输入当然是shuffle的输出。然后Reduce阶段调用用户实现的函数,叫做Reducer,对每个不同的键和该键的对应的值的数据流进行独立、并行的处理。每个reducer遍历键对应的值,然后对值进行“置换”。这些置换通常指的的是值的聚合或者什么也不处理,然后把键值对写入数据库、表格或者文件中。