mapreduce是hadoop的核心组成,是专门用于数据计算。主要掌握 map、reduce 函数的特点、如何写函数。
我的开发环境是在eclipse,运行程序的时候经常会出现 java 内存不足的情况,需要修改ecplise的jdk使用自己安装的JDK就行。
对于 Hadoop 的 map 函数和 reduce 函数,处理的数据是键值对,也就是说 map 函数接收的数据是键值对,两个参数;输出的也是键值对,两个参数;reduce 函数接收的数和输出的结果也是键值对。我们要做的就是覆盖hadoop的map函数和reduce函数。
mapreduce的执行过程
MapReduce 运行的时候,会通过 Mapper 运行的任务读取 HDFS 中的数据文件,然后调用自己的方法,处理数据,最后输出。Reducer 任务会接收 Mapper 任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到 HDFS 的文件中。
Mapper任务的执行过程
每个 Mapper 任务是一个 java 进程,它会读取 HDFS 中的文件,解析成很多的键值对,经过我们覆盖的 map 方法处理后, 转换为很多的键值对再输出
把 Mapper 任务的运行过程分为六个阶段。
第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。
第二阶段是对输入片中的记录按照一定的规则解析成键值对。
第三阶段是调用 Mapper 类中的 map 方法。
第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。
第五阶段是对每个分区中的键值对进行排序。
第六阶段是对数据进行归约处理,也就是 reduce 处理。键相等的键值对会调用一次reduce 方法。经过这一阶段,数据量会减少。归约后的数据输出到本地的 linxu 文件中。
Reducer任务的执行过程
每个 Reducer 任务是一个 java 进程。Reducer 任务接收 Mapper 任务的输出,归约处理后写入到 HDFS 中。
可以分为3个阶段
第一阶段是 Reducer 任务会主动从 Mapper 任务复制其输出的键值对。 Mapper 任务可能会有很多,因此 Reducer 会复制多个 Mapper 的输出。
第二阶段是把复制到 Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
第三阶段是对排序后的键值对调用 reduce 方法。 键相等的键值对调用一次 reduce 方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到 HDFS 文件中。
在整个 MapReduce 程序的开发过程中,我们最大的工作量是覆盖 map 函数和覆盖reduce 函数。
相关文章
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
- Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
- SLF4J: Hbase和Flume的slf4j-log4j12-x.x.xx.jar与hadoop的slf4j-log4j12-x.x.xx.jar冲突
- MySQL之InnoDB的锁类型与锁原理
- Java中AWT,Swing与SWT三大GUI技术的原理与效率区别
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
- 飞秋2010 开发团队建设与管理的一些心得
- [Hadoop--基础]--用户自定义mapreduce输出的文件名称
- TCP/IP协议原理与应用笔记21:路由选择的方法