MapReduce是Hadoop系统核心组件之一,是一种可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是目前分布式计算模型中应用较为广泛的一种。
MapReduce核心思想:分而治之。
使用MapReduce操作海量数据时:
- 每个MapReduce程序被初始化为一个工作任务
- 每个工作任务可以分为Map和Reduce l两个阶段
- Map阶段:负责将任务分解,即把负责的任务分解成若干个简单任务来并行处理,但前提是这些任务没有必然的依赖关系,可以单独执行任务。
- Reduce阶段:负责将任务合并,即把Map阶段的结果进行全局汇总。
MapReduce编程模型:用于处理大规模数据集的并行运算。
其编程思想实现过程通过map()和reduce() 函数来完成
从数据格式上来看,map()函数接收的数据格式是键值对,产生输出结果也是键值对形式;reduce()函数会将map()函数输出的键值对作为输入,把相同key值的value进行汇总,输出新的键值对。(整个过程相当于键值对转换的过程)
具体MapReduce简易数据模型:
- 将原始数据处理成键值对<K1, V1>形式
- 将解析后的键值对<K1, V1>传给map()函数,map()函数会根据映射规则,将键值对<K1, V1>映射为一系列中间结果形式的键值对<K2, V2>
- 将中间形式的键值对<K2, V2>形成<K2, {V2, …}>形式传给reduce()函数处理,把具有相同key的value合并在一起,产生新的键值对<K3, V3>,此时的键值对<K3, V3>就是最终输出结果
注意:可以有Map过程,没有Reduce过程,Map过程产生的数据可以直接写入到HDFS中,当然如果任务复杂,也可以有多个Reduce过程。
MapReduce编程实例:词频统计
词频统计原理图: