MapReduce

MapReduce是一个分布式运算编程框架,适用于大规模数据的离线处理。它包括map和reduce两个阶段,map阶段进行数据清洗,reduce阶段进行数据汇总。MapReduce程序由Mapper、Reducer和Driver组成,其并行度由切片和mapTask数量决定。Shuffle机制在Map和Reduce之间进行数据排序和分区,而Combiner则可以减少网络传输量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,最后进行输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值