MapReduce 概述
MapReduce 是一个分布式运算程序的编程框架。
核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
优点:
- 易于编程。用户只关心,业务逻辑。实现框架的接口。
- 良好扩展性,可以动态增加服务器,解决计算资源不够的问题。
- 高容错性。任何一台机器挂掉,可以将任务转移到其他节点。
- 适合海量数据的计算(TB/PB)。几千台服务器共同计算。
缺点:
- 不擅长实时计算。
- 不擅长流式计算。spark streaming 和 flink 可以。
- 不擅长 DAG 有向无环图计算。spark 可以。
1)MapReduce 运算一般需要分成 2 个阶段:
Map 阶段和 Reduce 阶段。
2)Map 阶段的并发 MapTask,完全并行运行,互不相干。
3)Reduce 阶段的并发 ReduceTask,完全不相干,但是它们的数据依赖于上一个阶段所有 MapTask 并发实例的输出。
4)MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。
MapReduce 进程
1) MrAppMaster:负责整个程序的过程调度及状态协调。
2)MapTask:负责 Map 阶段的整个数据处理流程。
3)ReduceTask 负责 Reduce 阶段的整个数据处理流程。
常用的数据序列化类型
Java 类型 | Hadoop Writable 类型 |
---|---|
Boolbean | BooleanWritable |
Byte | ByteWritable |
Int | IntWritable |
Float | FloatWritable |
Double | DoubleWritable |
String | Text |
Map | MapWritable |
Array | ArrayWritable |
Null | NullWritable |