mapreduce入门和编程步骤
1、理解MapReduce思想
MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总。
这两个阶段合起来正是MapReduce思想的体现。
下图的每个part认为是一个block,每个block块启动一个mapTask线程去处理对应的block块。
2、mapreduce编程的八个步骤:
map阶段
1.读取文件,解析成key value对,这是我们的(k1,v1)。
2.自定义map逻辑,接收读取的 key value对,通过我们自定义的 逻辑把k1 v1转换成(k2,v2)输出。
shuffle阶段(mapreduce调优主要是在shuffle阶段)
3.分区 ( 相同k2的value,发送到一个reduce里面去.形成一个集合)
4.排序
5.归约
6.分组
reduce阶段
7.自定义reduce逻辑,接收我们的(k2,v2),写上我们自己的业务逻辑,转换为新的(k3,v3)准备输出。
8.输出文件,将我们reduce处理完之后的文件进行输出。
3.mapreduce模板
每个步骤都是一个java类,通过我们自定义的java类就可以控制我们的步骤。
各个java类通过Job这个类组织到一起就可以了。
注意:mapreduce的最后输出路径不能存在,存在报错。