MapReduce定义
mapReduce是一个分布式运算程序的编程框架,是用户开发基于hadoop的数据分析应用的核心框架。
mapreduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并运行在一个hadoop集群上。
MapReduce的优缺点
优点:
易于编程
良好的扩展性
高容错性
适合tb/pb级以上海量数据的离线处理
缺点:
不擅长实时计算
不擅长流式计算
不擅长DAG(有向无环图)计算
MapReduce的核心思想
1、mapreduce运算程序分为两个阶段,map阶段和reduce阶段
2、map阶段的并发maptask,完全并行运行,互不相干
3、reduce阶段的并发reducetask,完全互不相干,但是他们的数据依赖于上一个阶段的所有maptask并行实例的输出
4、MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
MapReduce程序的两个阶段
map阶段(分析处理清洗数据)
reduce阶段(对数据进行汇总)
MapReduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer和Driver。
Mapper(mai po)阶段:
用户定义mapper要继承自己的父类
mapper的输入数据是kv对的形式
mapper中的业务逻辑写在map()中
mapper的输出数据是kv对的形式
map()方法 (maptask进程)对每个kv调用一次7
Reducer阶段
用户自定义的Reducer要继承自己的父类
Reducer的输入数据类型对应Mapper的输出数据类型,也是kv
Reducere的业务逻辑写在reduce()方法中
ReduceTask进程对每一组相同的k的<k ,v>组调用一次reduce()方法
Driver(zuai wo)阶段
相当于yarn集群的客户端,用于提交我们整个程序到yarn集群,提交的是封装了MapperReduce程序相关运行参数的job对象
MapReduce进程
一个完整的MapReduce程序在分布式运行时有三类实例进程:
(1)MrAppMaster(mrapp ma si te)(老大):负责整个程序的过程调度及状态协调。
(2)MapTask:负责Map阶段的整个数据处理流程。(map阶段进行数据清洗的)
(3)ReduceTask:负责Reduce阶段的整个数据处理流程。(reduce阶段 负责数据汇总)
MapReduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer和Driver。
切片与mapTask并行度机制
MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个job的处理速度。
mapTask的个数决定了我的并行度
MapTask并行度决定机制
数据块:block是hdfs物理上把数据分成一块一块的,数据块是hdfs存储数据单位
数据切片:一个切片就会启动一个对应的mapTask
1、一个job的map阶段并行度由客户端在提交job时的切片数决定
2、每一个split切片分配一个MapTask并行实例处理
3、默认情况下,切片大小=blockSize(块的大小)
4、切片数不考虑数据集整体,而是逐个针对每一个文件单独切片
FileinputFormat(fei e yin pu te fo ma te)切片源码解析
1、程序先找到你数据存储的目录
2、开始变量处理(规划切片)目录下的每一个文件
3、遍历第一个文件ss.txt
a 获取文件大小
b 计算切片大小
c 默认情况下切块大小 128m
d 开始切片 每次切片时都要判断切完剩下的部分是否大于块的1.1倍,不大于就划分一块切片
e 将切片信息写到一个切片规划文件中
f 整个切片的核心过程在getSplit()方法中
g inputsplit只记录了切片的元数据信息,比如起始位置,长度以及所在的节点列表等
4、提交切片规划文件到yarn,yarn上的MrappMaster就可以根据切片规划文件计算开启maptask个数
切片机制:
1、简单按照文件的内容长度进行切片
2、切片大小,默认等于Block(块)大小
3、切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
小结:默认按照128m进行切片,每次切片都要判断切完剩下的部分是否大于块的1.1倍,不大于就划分一块切片。
CombineTextInputFormat切片机制
虚拟存储过程
将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较,如果不大于设置的最大值,逻辑上划分一个块。如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块;当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)。
切片过程
a 判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个切片。
b 如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片。
排序 正常情况,按照key进行排序 前提是key之后只有一个值 默认排序
排序时机
1、环形缓冲区 内存达到80% 溢写到硬盘进行排序
2、环形缓冲区 内存 +硬盘 进行合并的时候排序
3、数据进入reduce方法之前
Conbiner合并
1、Combiner是MR程序中Mapper和Reducer之外的一种组件
2、Combiner组件的父类就是Reducer
3、Combiner和Reducer的区别在于运行时的位置
Conbiner是在每一个MapTask所在的节点运行
Reducer是接收全局所有Mapper的输出结果
4、Cimbiner的意义就是对每一个MapTask的输出进行汇总,以减小网络传输量。
5、Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv 应该跟Reducer的输入kv类型要对应起来。
Shuffle机制
Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。
它的主要功能就是将map输出作为输入传递给reducer,
Reduce Join工作原理
Map端的主要工作:为来自不同表或文件的key/value对,打标签以区分不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。