MapReduce概述
1.MapReduce定义
MapReduce是一个分布式运算程序的编程框架。
MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
总结:自己处理业务相关代码+自身的默认代码
2.MapReduce的优点
1).易于编程。用户只需要注意业务逻辑和实现框架的借口。
2).良好的扩展性。可以动态增加服务器,解决计算资源不够的问题。
3).高容错性。任何一台机器出错后,可以将任务转移到其他节点。
4).适合海量数据计算(TB/PB)。
3.MapReduce的缺点
1).不擅长实时计算。实时计算可以用mysql。
2).不擅长流式计算。MapReduce的输入数据是静态的,不能动态变化。flink可以
3).不擅长有向无环图(DAG)计算。比如前一个应用的输出作为后一个程序的输入。每个MapReduce的输出都会写入到磁盘,会造成大量的磁盘IO,导致性能低下。
4.MapReduce的核心思想
5.MaReduce进程
一个完整的MaReduce程序在分布式运行时油三类实列进程:
1)MrAppMaster。负责整个查询的过程调度和状态协调
2)MapTask。负责Map阶段的整个数据处理流程
3)ReduceTask。负责Reduce阶段的整个数据处理流程
6.常用数据序列化类型
与Java其实基本一致。
7.MapReduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer 和 Driver。
Mapper阶段
(1)用户自定义的Mapper要继承自己的父类
(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)
K代表初始位置的偏移量,V对应行内容。
(3)Mapper中的业务逻辑写在map()方法中
(4)Mapper的输出数据是KV对的形式(KV的类型可自定义)
(5)map()方法(MapTask进程)对每一个<K,V>调用一次
Reducer阶段
(1)用户自定义的Reducer要继承自己的父类
(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
(3)Reducer的业务逻辑写在reduce()方法中
(4)ReduceTask进程对每一组相同k的<k,v>组调用一次Reduce()方法
有多少个K就进入多少次Reduce,比如说输入数据是:(a,1)、(a,1)、(b,1)、(b,1)。该组数据会调用Reduce两次,因为只有a和b两个不同的K。
Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象
(案例)统计单词出现个数