Hadoop-MapReduce
2025-06-20 20:09:46 0 举报
MapReduce
作者其他创作
大纲/内容
Block2128M
DataNode01
Block1128M
这里就是程序员R代码
0分区 李四...
资源稀缺的环境
DataNode04
HDFS:DataNodeMR:TaskTracker
提交 Job
溢写
MapTask
spill1.out.index内存 1KB
百家姓.txt300M
ReduceTask1
DataNode03
快速排序——前后指针法
jar 包MR 代码
3分区 王一...
MR系统
1.每次环形数据缓冲区达到溢写阈值时,只会溢出一个数据文件,名称叫 spill次数.out,对应还会生成一个 spill次数.out.index 的索引文件用于描述数据文件各分区的起始以及长度2.每次合并最多合并 10 个文件,合并时使用归并排序3.最终输出至 ReduceTask 时会最终合并一次,合并为 file.out 数据文件和 file.out.index 索引文件
分区1最终合并文件每次合并文件最多为10个合并时使用归并排序
合并
7
2
KV行读取器K —— 偏移量V —— 一行数据
3.存储数据
内存
pivot
分区排序
1分区 张三...
快速
Client
按元数据信息(分区排序),对数据溢写默认Hash分区,快速排序
100M
ReduceTask
通过 RPC 协议向汇报自己的状态和进度
写入内存环形数据缓冲区
80%
8
OutPut
10
分区0 张x 李x....
Split1256M
Hadoop YARN —— 资源管理框架(CPU Memory)
5
Block344M
ApplicationMaster
Disk 磁盘
Split 数据切片
1.相同 Key 的数据肯定在同一个 ReduceTask,同一个 ReduceTask 可以有多个 Key2.根据 file.out.index 索引文件拉取对应的分区数据至 ReduceTask 内存3.ReduceTask 的内存缓冲区大小默认为当前节点可用内存的 70%4.ReduceTask 分组规则按以下流程执行: a.查找程序员定义的分组器,如果有则直接使用; b.如果 a 不满足,查找程序员定义的比较器,如果有直接使用 c.如果 b 不满足,按 MapTask 写出的 Key 的比较器进行分组
3
Combiner可选环节小ReduceMap预聚合内存 - 磁盘
资源充足的环境
Conbiner 组合器(可选)小 Reduce
Memory 内存
HDFS分布式文件系统产生一个目录,目录下有一个分区文件
张三 1李四 1王一 1xx 1
4
1
拷贝拉取
6
End
LineRecordReader读取切片的数据,读取的数据格式为 KVK:行偏移量V:一行数据
DB
5个 Split64M
6.注册
8.通过RPC协议申请资源运行Task
11.结束任务 注销自己
堆高级选择
ApplicationManager
DataNode06
spill1.out.indexp1_起始位置、数据长度p2_起始位置、数据长度p3_起始位置、数据长度
最终合并file.out
MapReduce计算流程(补)
10.分配对应的Task给Continer
Merge 合并:合并不能减少传输的数据量,只能减少传输的文件数量
合并归并排序
资源:Slots(CPU和内存)优点:固定大小,方便计算与管理缺点:固定大小,资源浪费
Reduce
其他MapTask1分区的数据
Key
Begin
Split256M
索引文件
64M
HDFS
Split164M
Split544M
0
1个 Split300M
NodeManager
Shuffle 洗牌 —— 分布式系统的天敌先把数据打散分布式计算,然后聚合结果产生大量的磁盘IO和网络IO
Container
HDFS下临时目录(使用JobID命名)
2.返回JobID和临时目录
磁盘
分组
ReduceTask0
归并
1.提交作业申请
十大排序方法
Split44M
Split244M
其他MapTask0分区的数据
快速排序——左右指针法
MapTask 工作流程:1.读取切片数据->2.将数据读入环形数据缓冲区(内存)->3.分区&排序->4.溢写->5.组合器(可选)->6.合并->7.写出 ReduceTask
Split 作用:动态调整参与计算的节点一个Split对应一个MapTaskSplit默认是文件块的大小
DataNode02
Java Code 重写 reduce()按照分组规则,相同组的数据的 Value 会在一起循环将 Value 累加起来,最终计算出人数
9
选择
1.能压缩数据的地方只有两个:MapTask 写出和 ReduceTask 的写出2.MapTask 写出的数据不需要进行分片,只需要从性能角度考虑,推荐 Snappy3.ReduceTask 写出数据需要考虑是否是下一个作业的入口数据: a.如果是,不推荐使用不可切分压缩算法 b.如果计算后的结果无需再次计算,就是归档存储,且后续再计算的可能性也比较小,使用高比例压缩算法,节省存储空间
spill1.out
赤道 = 0
最终合并file.out.index
DataNode05
4.通过submitApplication提交Job
HDFS分布式文件系统产生一个目录,目录下有三个分区文件
ReduceTaskGzip300M
Split144M
分区2 赵x 田x....
快速排序——挖坑法
从数列中挑出一个元素,称为 \"基准\"(pivot);重新排序数列,所有元素比基准值小的摆放在基准左边,所有元素比基准值大的摆在基准的右边;
排序算法分类
2.x的资源代名词 —— Container
希尔高级插入
Combiner 预聚合(用户自定义设置)1.每次 Spill 溢写时会被调用2.合并时文件数超过 3 个会被调用
进阶
Split364M
MapTask给数据打标签、分区、排序数据
程序员
程序员的Map代码
Split464M
分区1 王x 周x....
spillN.out
实现MapTask的预聚合,减少传输的数据量
spill2.out
Job人物的主导者 —— ApplicationMaster负责调度被本次分配的资源Continer任务完成时向ResourceManager进行汇报杀死线程
ResourceManager:资源管理者AppliicationMaster:任务管理者
冒泡
MapReduce压缩
Prev
9.资源调度分配Continer来进行Task工作
资源协调框架的管理者 —— ResourceManager分为主节点与被用节点(防止单体故障)与 NodeManager 保持心跳,接受 NodeManger 的资源情况汇报负责资源的管理外部框架要调用资源直接与 ResouceManger直接交互MR任务的资源分配
计数
客户端 —— Client发送 mr 的任务到集群客户端种类多样
资源协调框架的执行者 —— NodeManager每一个 DataNode上都默认存在一个NodeManager将自己的信息通过心跳汇报给ResourceManager
Yarn架构
基数
ReduceTask将MapTask处理完的数据进行聚合
Hadoop 1.0 架构
...
HDFS:NameNodeMR:JobTracker1.0资源的管理和分配都是JobTracker
这些文件始终内部有序,外部无序合并归并最终完整有序
二度关系:A 和 B 好友,B 和 C 好友,A 和 C 可能是好友利用二度关系完成好友推荐功能。1.计算所有登录用户与好友关系(直接好友、间接好友)2.Mapper 给直接好友标记为 0,给间接好友标记为 1 写出3.将 hadoop hello 和 hello hadoop 的前后顺序进行统一,方便 Reducer 分组4.Reducer 根据关系分组,标记值相加,每次相加时计数器递增 15.标记值 == 计数器,则推荐
Merge 合并:合并不能减少传输的数据量,只能减少传输的文件数量,默认是个合并一次
Shuffle 是什么?1.Shuffle 是分布式系统的天敌,所谓的 Shuffle 就是因为数据量太大,一台机器无法计算得出结果,所以需要对数据拆分,然后将相同的算法映射到拆分后的数据上。由于数据被拆分了,所以拆分后的数据还需要进行汇集合并处理,这种分分合合的过程会产生多次的网络 IO、磁盘 IO,之中现象被称为 Shuffle。2.在 Hadoop MR 计算模型中,Shuffle 一般指的是 map 方法到 reduce 方法之间的过程
偏方
5.选择NodeManager并开启ApplicationMaster线程
7.读取切片信息
HDFS分布式文件系统
定义一个 Begin 指向第一个元素,定义一个 End 指向最后一个元素。令第一个元素为 Key,Begin 向后找大于 Key的值,End 向前找小于 Key 的值,找到之后把 Begin 跟 End 位置的值交换,直到 Begin 的索引大于等于 End 的索引时结束,然后将 Key 和End 指针值交换。再将 Key 的左右两边重复上述操作,最终有序。
第一遍计算的结果 -> 第二遍计算的入口
Split
Container——容器(CPU和内存)ApplicationMaster
ResourceScheduler(调度器)
Cur
NoSQL
MapReduce计算流程
ResourceManager
1024片1024 MapTask1T数据
桶
分区2最终合并文件每次合并文件最多为10个合并时使用归并排序
不值钱
环形数据缓冲区:1.右侧写入数据2.左侧写入元数据(数据偏移量、分区、排序信息)3.环形数据缓冲区底层就是一个数组,逻辑上首尾相连,从而形成环形数据缓冲区4.数组大小默认为100M,当写入数据达到80%,开始按照元数据的分区排序进行溢写5.在剩余的 20% 的中间位置设置新的赤道,如此反复,使得环形数据缓冲区实现无卡顿读写6.默认使用 Hash 分区和快速排序
Java Code重写map()
分区0 最终合并文件每次合并文件最多为10个合并时使用归并排序
Task(MapTask--ReduceTask)按照MR流程进行业务的执行完成任务,ApplicationMaster接受当前节点的反馈
Hadoop 2.0 架构(抽离了CPU和内存管理器的接口,封装了YARN架构)Hadoop 作者根据自己封装的接口提供了实现类 —— MR 作业处理流程Spark 作者根据Hadoop 作者封装的接口提供了实现类 —— Spark 作业处理流程
默认Hash分区,默认快速排序
ReduceTask200M
内存占比大 分成三个Reduce
常用
资源:Container(最小资源单位(CPU和内存))优点:可以动态调整让资源利用更充分
基准
Split264M
HDFS:DataNodeMR:TaskTrackerYARN:NodeManager
Reduce环形数据缓冲区的内存是物理机内存的70%溢写比例是70%的66%
ReduceTaskBzip2300M
HDFS:NameNodeMR:JobTrackerYARN:ResourceManger
1. Split 可以动态调整参与计算的节点数量,希望更多的节点参与到计算,使用比文件块更小的切片设置,希望更少的节点参与到计算,使用比文件块更大的切片设置。默认和文件块一样大2.每个 Split 切片会生成一个计算任务(MapTask),执行程序员编写的计算代码
插入
0 条评论
下一页