目录
- MapReduce定义
- MapReduce优缺点
- 优点
- 缺点
- MapReduce核心编程思想
- MapReduce进程
- 常用数据序列化类型
- MapReduce编程规范
- Mapper阶段
- Reducer阶段
- Driver阶段
- OutputFormat接口实现类
MapReduce定义
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;
MapReduce核心功能是将用户编写的业务逻辑代码
和自带默认组件
整合成一个完整的分布式运算程序
,并发运行在一个hadoop集群上。
MapReduce优缺点
优点
1.易于编程。用户只关心业务逻辑、实现框架的接口;
2.良好的扩展性:可以动态增加服务器,解决计算资源不够用的问题;
3.高容错性:任何一台机器挂掉,都可以将任务转移到其他节点;
4.适合海量数据计算(TB/PB):几千台服务器共同计算。
缺点
1.不擅长实时计算;
2.不擅长流失计算;
3.不擅长DAG有向无环图计算。
MapReduce核心编程思想
MapReduce核心编程思想:
1.MapReduce运行程序一般需要分为2个阶段:Map阶段和Reduce阶段;
2.Map阶段的并发MapTask,完全并行运行,互不干涉;
3.Reduce阶段的兵法ReduceTask,完全互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出;
4.MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
MapReduce进程
一个完整的MapReduce程序在分布式运行时有3类实例进程:
1.MrAppMaster: 负责整个程序的过程调度及状态协调;
2.MapTask: 负责Map阶段的整个数据处理流程;
3.ReduceTask: 负责Reduce阶段的整个数据处理流程。
常用数据序列化类型
MapReduce编程规范
用户编写的程序分为三个部分:Mapper、Reducer、Driver。
Mapper阶段
1.用户自定义分Mapper要继承自己的父类;
2.Mapper的输入数据是KV对的形式(KV的类型可自定义);
3.Mapper中的业务逻辑写在map()方法中;
4.Mapper的输出数据是KV对的形式(KV的类型可自定义);
5.Map()方法(Map Task进程)对每一个<K,V>调用一次。
Reducer阶段
1.用户自定义的Reducer要继承自己的父类;
2.Reducer的输入数据类型对应Mapper的输出数据类型,也是KV;
3.Reducer的业务逻辑写在reduce()方法中;
4.ReducerTask进程对每一组相同k的<k,v>组调用一次reduce()方法;
Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。
wordcount词频统计案例==》
OutputFormat接口实现类
OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。
- OutputFormat实现类
- 默认输出格式TextOutputFormat
- 自定义OutputFormat
a. 自定义一个类继承Fileoutputformat;
b.改写RecordWriter,具体改写输出数据的方法write().