大数据之MapReduce(一)
MapReduce概述与特新
介绍
- 一个分布式运算的编程框架,是用户开发基于Hadoop的数据分析应用的核心框架
- 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上
- 优点:易于编程、良好的扩展性、高容错性、适合PB级以上海量数据的离线处理
- 缺点:不擅长实时计算、不擅长流式计算(输入数据是动态的)、不擅长DAG(有向图)计算(多个应用程序存在依赖关系,后一个应用输入为前一个的输出,MapReduce不是不能完成,每个操作都会写入磁盘会造成大量的磁盘IO,导致性能低下)
核心思想
启动阶段
- 第一个阶段的MapTask并发实例,完全并行运行,互不相干。
- 第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
- MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
- 总结:分析WordCount数据流走向深入理解MapReduce核心思想。
进程
- MrAppMaster:负责整个程序的过程调度及状态协调
- MapTask:负责Map阶段的整个数据处理流程
- ReduceTask:负责Reduce阶段的整个数据处理流程
编程规范
-
Mapper阶段
- 用户自定义的Mapper要继承自己的父类Mapper
- Mapper的输入数据是KV对的形式(KV类型可自定义)
- Mapper中的业务逻辑写在map()方法中
- Mapper的输出数据是KV对的形式(KV类型可自定义)
- map()方法(MapTask进程)对每一个<K,V>调用一次
-
Reduce阶段
- 用户自定义的Reduce要继承自己的父类Reduce
- Reduce的输入数据类型对于Mapper的输出数据类型(KV)
- Reduce的业务逻辑写在reduce()方法中
- ReduceTask进程对每一个相同K的<K,V>组调用一次reduce()方法
-
Driver阶段
- 创建job对象
- 配置jar路径
- 配置mapper、reduce路径
- 配置map输出的KV类型
- 配置最终输出的KV类型
- 配置输入、输出
- 启动job
- 相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象