1 MapReduce介绍
- 1.1 MapReduce定义
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自身默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
- 1.2 MapReduce核心思想
(1)分布式的运算程序往往需要分成至少2个阶段。
(2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。
(3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
(4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
- 1.3 MapReduce进程
一个完整的MapReducer程序在分布式运行时有三类实例进程:①MrAppMaster:负责整个程序的过程调度以及状态协调。②MapTask:负责Map阶段的整个数据处理流程。
③ReduceTask:负责Reduce阶段的整个数据处理流程。
2 官方WordCount源码
- 2.1 WordCount案例的实质
采用反编译工具反编译源码,发现WordCount案例有Map类、Reduce类和驱动类。且数据的类型是Hadoop自身封装的序列化类型。
- 2.2 常用数据序列化类型
表1-1 常用的数据类型对应的Hadoop数据序列化类型
Java类型 | Hadoop Writable类型 |
---|---|
boolean | BooleanWritable |
byte | ByteWritable |
int | IntWritable |
float | FloatWritable |
long | LongWritable |
double | DoubleWritable |
String | Text |
map | MapWritable |
array | ArrayWritable |
- 2.3 MapReduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer和Driver。
1、Mapper阶段
(1)用户自定义的Mapper要继承自己的父类
(2)Mapper的输入数据是KV键值对的形式(KV的类型可以自定义)
(3)Mapper中的业务逻辑写在map()方法中
(4)Mapper的输出数据是KV键值对的形式(KV的类型可以自定义)
(5)map()方法[MapTask进程]对每一个<K,V>调用一次
2、Reducer阶段
(1)用户自定义的Reducer要继承自己的父类
(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
(3)Reducer的业务逻辑写在reduce()方法中
(4)ReduceTask进程对每一组相同的<K,V>组调用一次reduce()方法
3、Driver阶段
相当于Yarn集群的客户端,用于提交我们整个程序到yarn集群,提交的是封装了MapReduce程序相关运行参数的job对象
3 Java开发环境配置hadoop
- 3.1 注意事项
1、该Hadoop集群为远程Hadoop集群,