MapReduce原理及编程
一.什么是MapReduce
1.MapReduce是一个分布式计算框架
- 将大型数据操作分解成可以跨服务器集群并行执行的单个任务
- 起源于Google
- 适用于大规模数据处理场景:每个节点处理存储在该节点的数据
- 每个job包含Map和Reduce两部分
2.MapReduce的设计思想
- 分而治之:简化并行计算的编程模型
- 构建抽象模型: Map和Reduce
- 异常系统细节
3,MapReduce的特点
3.1优点
- 易于编程
- 可扩展性
- 高容错性
- 高吞吐量
3.2不适用领域 - 难以实时计算
- 不适用于流式计算
- 不擅长DAG(有向图)计算:
多个应用程序存在依赖关系,后一个程序的输入为前一个程序的输出,在这种情况下,MapReduce并不是不能做,而是使用后,每一个 MapReduce作业的输出结果都会写入磁盘,会造成大量的磁盘IO,导致性能非常的低下.
二.常用数据序列化类型
java类型 | Hadoop Writable类型 |
---|---|
boolean | BooleanWritable |
byte | ByteWrtiable |
int | IntWritable |
float | FloatWritable |
long | LongWtitable |
double | DoubleWritable |
String | Text |
map | MapWritable |
array | ArrayWritable |
三.MapReduce编程规范
1.Mapper阶段
- 用户自定义的Mapper要继承自己的父类
- Mapper的输入数据是KV对的形式(KV的类型可自定义)
- Mapper中的业务逻辑写在map()方法中
- Mapper的输出数据是KV对的形式(KV的类型可自定义)
- map()方法(MapTask进程)对每一个<K,V>只调用一次
2.Reducer阶段
- 用户自定义的Reducer要继承自己的父类
- Reducer的输入数据类型对应Mapper的输出数据类型,也就是KV
- Reducer的业务逻辑写在reduce()方法中
- ReduceTask进程对每一组相同K的<K,V>组调用一次reduce()方法
3.Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象
四.MapReduce核心编程思想
以统计文件(两个文件,一个200MB,一个100Mb)中每一个单词出现的总次数为例说明