MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。主要用于分析数据。
优缺点
- 优点
易于编程,接口简单;
良好的扩展性,可以通过简单的增加机器扩展计算性能;
高容错性,当一个节点挂了,它可以将上面的计算任务转移到另外一个节点上运行而不需要人工参与;
适合PB级以上海量数据的离线处理。 - 缺点
不擅长实时计算,无法在毫秒活着妙级返回结果;
不擅长流式计算,MapReduce输入数据必须是静态的,不能动态变化;
不擅长DAG(有向图)计算,多个程序存在依赖关系,后一个的输入为前一个的输出,每个MapReduce的输出都会写入到磁盘,造成大量IO;
核心编程思想
MapReduce进程
一个完整的MapReduce程序在分布式运行时有三类实例进程:
- MrAppMaster:负责整个程序的过程调度及状态协调。(Job)
- MapTask:负责Map阶段的整个数据处理流程。(分)
- ReduceTask:负责Reduce阶段的整个数据处理流程。(合)
Hadoop常用数据序列化类型
MapReduce编程规范
1.Mapper阶段
1)用户自定义的Mapper类要继承自己的父类
2)Mapper的输入数据是Key-Value对的形式(Key-Value的类型可以自己定义)
3)Mapper中的业务逻辑写在map()
方法中
4)Mapper的输出数据是Key-Value对的形式(Key-Value的类型可以自己定义)
5)map()
方法(MapTask进程)对每个<K,V>只调用一次
2. Reducer阶段
1)用户自定义的Reducer要继承自己的父类
2)Reducer的输入数据类型对应Mapper的输出数据类型,也是Key-Value
3)Reducer的业务逻辑写在reduce()
方法中
4)ReduceTask进程对每一组相同K的<K,V>组调用一次reduce()
方法
3. Driver阶段
相当于Yarn集群的客户端,用于提交我们整个程序到Yarn集群,提交的是封装了MapReduce程序相关运行参数的Job对象。(输出输出路径等)