分布式计算框架MapReduce
MapReduce是一种并行编程模型,用于大规模数据集的并行运算。"Map"(映射)和”Reduce“(归约)是它的主要思想,是从函数式编程语言借来的,MapReduce还有从矢量编程语言里借来的特性。它极大的方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指一个Map(映射)函数,实现任务的分配,指定并发的Reduce(归约)函数,用来任务的汇总。
目录
一、MapReduce定义
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
二、MapReduce优缺点
优点:
- 1、MapReduce易于编程
- 2、良好的扩展性
- 3、高容错性
- 4、适合PB级以上海量数据的离线处理
- 缺点:
- 1、不擅长实时计算
- 2、不擅长流式计算
- 3、不擅长DAG(有向无环图)计算
-
三、MapReduce进程
- 一个完整的MapReduce程序在分布式运行时有三类实例进程:
- 1、MrAppMaster:负责整个程序的过程调度及状态协调。
- 2、MapTask:负责Map阶段的整个数据处理流程。
- 3、ReduceTask:负责Reduce阶段的整个数据处理流程。
-
四、常用数据序列化类型
-
Java类型
Hadoop Writable类型
Boolean
BooleanWritable
Byte
ByteWritable
Int
IntWritable
Float
FloatWritable
Long
LongWritable
Double
DoubleWritable
String
Text
Map
MapWritable
Array
ArrayWritable
Null
NullWritable
- 2、MapTask:负责Map阶段的整个数据处理流程。
- 1、MrAppMaster:负责整个程序的过程调度及状态协调。
- 2、不擅长流式计算
- 1、不擅长实时计算
- 3、高容错性
- 2、良好的扩展性
五、 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,V>组调用一次reduce()方法。
3、Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装MapReduce程序相关运行参数的job对象。