首页 > 技术文章 > mapreduce入门和编程步骤

nacyswiss 2020-03-27 11:56 原文

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的最后输出路径不能存在,存在报错。

 

推荐阅读