Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。
MapReduce 作业通过将输入的数据集拆分为独立的块,这些块由 map
以并行的方式处理,框架对 map
的输出进行排序,然后输入到 reduce
中。MapReduce 框架专门用于 <key,value>
键值对处理,它将作业的输入视为一组 <key,value>
对,并生成一组 <key,value>
对作为输出。输出和输出的 key
和 value
都必须实现 Writable 接口。
这里以词频统计为例进行说明,MapReduce 处理的流程如下:
K1
行数,V1
表示对应行的文本内容;List(K2,V2)
,其中 K2
代表每一个单词,由于是做词频统计,所以 V2
的值为 1,代表出现 1 次;Mapping
操作可能是在不同的机器上并行处理的,所以需要通过 shuffling
将相同 key
值的数据分发到同一个节点上去合并,这样才能统计出最终的结果,此时得到 K2
为每一个单词,List(V2)
为可迭代集合,V2
就是 Mapping 中的 V2;Reducing
对 List(V2)
进行归约求和操作,最终输出。MapReduce 编程模型中 splitting
和 shuffing
操作都是由框架实现的,需要我们自己编程实现的只有 mapping
和 reducing
,这也就是 MapReduce 这个称呼的来源。