MapReduce
MapReduce 核心思想:分治
Map:负责分,即把复杂的任务分解为若干个简单的任务来并行处理。拆分前提为这些小任务可以进行并行计算,彼此之间几乎没有依赖关系。Reduce: 负责合,对map阶段的结果进行全局汇总,最后进行数据输出。
Map和Reduce这两个阶段和一起就是MapReduce的思想体现。

MapReduce编程的八个步骤
Map 阶段: 分的步骤
第一步:读取文件,将其解析为
key/value对k1/v1,并将k1/v1输出到第二步第二步:自定义map逻辑,处理第一步发过来的
k1/v1,自定义处理逻辑进行处理,处理后变为k2/v2,输出到第三步
Shuffle阶段: 分组阶段
第三步:分区,对
k2/v2进行分区,相同的key将会发送到同一个Reduce中,形成一个集合第四步:排序,对上述集合进行字典排序
第五步:规约,主要在map端对数据做一次聚合,减少我们输出key2的数据量
第六步:分组,将相同的数据发送到同一组里面去调用一次reduce逻辑
**Reduce阶段:**合的步骤
第七步:自定义reduce逻辑,接收
k2/v2,将其转换为k3/v3进行输出第八步:输出,将reduce处理完成的数据进行输出
每个步骤都对应一个Class类,将八个类组织到一起就是MapReduce程序
单词统计MapReduce编程示例
代码可以参考:https://github.com/xf616510229/hadoop-study/tree/master/wordcount

0. 添加测试数据 wordcount.txt到hdfs
1. 创建JobMain对象,此对象代表一个MapReduce任务,负责将八大步骤(八个类)编织为一个流程:
2. 创建WordCountMapper对象,主要负责map工作,将k1/v1转换为k2/v2:
3. 创建WordCountReducer对象,主要负责reduce合的操作,将k2/v2转换为k3/v3:
MapReduce的分区
在MapReduce八大编程步骤中,第三步为分区,对k2/v2进行分区,相同的key将会发送到同一个Reduce中,形成一个集合。
分区主要将相同的数据发送到同一个reduce中。
最后更新于
这有帮助吗?