当前位置: 首页 > news >正文

大数据基础:Hadoop之MapReduce重点架构原理

文章目录

Hadoop之MapReduce重点架构原理

一、MapReduce概念

二、MapReduce 编程思想

2.1、Map阶段

2.2、Reduce阶段

三、MapReduce处理数据流程

四、MapReduce Shuffle

五、MapReduce注意点

六、MapReduce的三次排序


Hadoop之MapReduce重点架构原理

一、MapReduce概念

MapReduce是Hadoop生态中的计算框架,用于大规模数据集的并行计算。

二、MapReduce 编程思想

2.1、Map阶段

在Map阶段中,输入数据被分割成若干个独立的块,并由多个Mapper任务并行处理,每个Mapper任务都会执行用户定义的map函数,将输入数据转换成一系列键-值对的形式(Key-Value Pairs),这些键-值对被中间存储,以供Reduce阶段使用。

Map阶段主要是对数据进行映射变换,读取一条数据可以返回一条或者多条K,V格式数据。

2.2、Reduce阶段

在Reduce阶段中,所有具有相同键的键-值对会被分配到同一个Reducer任务上,Reducer任务会执行用户定义的reduce函数,对相同键的值进行聚合、汇总或其他操作,生成最终的输出结果,Reduce阶段也可以由多个Reduce Task并行执行。

Reduce阶段主要对相同key的数据进行聚合,最终对相同key的数据生成一个结果,最终写出到磁盘文件中。

三、MapReduce处理数据流程

  1. 首先MapReduce会将处理的数据集划分成多个split,split划分是逻辑上进行划分,而非物理上的切分,每个split默认与Block块大小相同,每个split由1个map task进行处理。

  2. map task以行为单位读取split中的数据,将数据转换成K,V格式数据,根据Key计算出本条数据应该写出的分区号,最终在内部得到(K,V,P)格式数据写入到当前map task 所在的物理节点磁盘,便于后续reduce task的处理。

  3. 为了避免每条数据都产生一次IO,MapReduce 引入了“环形缓冲区”内存数据结构,默认大小100M。先将处理好的每条数据写入到“环形缓冲区”,当环形缓冲区使用达到80%时,会将数据溢写到磁盘文件。根据split大小不同,可能会发生多次溢写磁盘过程。

  4. 每次溢写磁盘时会对数据进行二次排序:按照数据(K,V,P)中的P(分区)进行排序并在每个P(分区)中按照K进行排序,这样能保证相同的分区数据放在一起并能保证每个分区内的数据按照key有序。

  5. 最终多次溢写的磁盘文件数据会根据归并排序算法合并成一个完整的磁盘文件,此刻,该磁盘文件特点是分区有序且分区内部数据按照key有序。

  6. Reduce端每个Reduce task会从每个map task所在的节点上拉取落地的磁盘文件对应的分区数据,对于每个Reduce task来说,从各个节点上拉取到多个分区数据后,每个分区内的数据按照key分组有序,但是总体来看这些分区文件中key数据不是全局有序状态(分区数据内部有序,外部无序)。

  7. 每个Reduce task需要再通过一次归并排序进行数据merge,将每个分区内的数据变成分区内按照key有序状态,然后通过Reduce task处理将结果写出到HDFS磁盘。

四、MapReduce Shuffle

  1. 分区(Partitioning):根据键值对的键,将中间键值对划分到不同的分区。每个分区对应一个Reduce任务,这样可以确保相同键的键值对被发送到同一个Reduce任务上进行处理。

  2. 排序(Sorting):对每个分区内的中间键值对按键进行排序(快排)。通过排序,相同键的键值对会相邻存放,以便后续的合并操作更高效。

  3. 合并(Merging):对多次溢写的结果按照分区进行归并排序合并溢写文件,每个maptask最终形成一个磁盘一些文件,减少后续Reduce阶段的输入数据量。

  4. Combiner(局部合并器):Combiner是一个可选的优化步骤,在Map任务输出结果后、Reduce输入前执行。其作用是对Map任务的输出进行局部合并,将具有相同键的键值对合并为一个,以减少需要传输到Reduce节点的数据量,降低网络开销,并提高整体性能。Combiner实际上是一种轻量级的Reduce操作,用于减少数据在网络传输过程中的负担。需要注意的是,Combiner的执行并不是强制的,而是由开发人员根据具体情况决定是否使用。

  5. 拷贝(Copying):将各分区内的数据复制到各自对应的Reduce任务节点上,会先向内存缓冲区中存放数据,内存不够再溢写磁盘,当所有数据复制完毕后,Reduce Task统一对内存和磁盘数据进行归并排序并交由Redcue方法并行处理。

五、MapReduce注意点

  1. MapReduce Job 中Map Task并行度由split切片决定。

  2. Split切片默认与一个block大小相等,block是物理切分,split是逻辑切分,也就是说split大小是通过offset范围来决定每个split大小,而非真正的文件切分。

  3. 读取数据源时,如果数据源头包括多个文件,会针对每个文件单独进行split切片,而不会考虑数据整体。

六、MapReduce的三次排序

  • 第一次排序发生在Map阶段的磁盘溢写时:当MapReduce的环形缓冲区达到溢写阈值时,在数据刷写到磁盘之前,会对数据按照key的字典序进行快速排序,以确保每个分区内的数据有序。

  • 第二次排序发生在多个溢写磁盘小文件合并的过程中:经过多次溢写后,Map端会生成多个磁盘文件,这些文件会被合并成一个分区有序且内部数据有序的输出文件,从而确保输出文件整体有序。

  • 第三次排序发生在Reduce端:Reduce任务在获取来自多个Map任务输出文件后,进行合并操作并通过归并排序生成每个Reduce Task处理的分区文件整体有序。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
http://www.lryc.cn/news/397170.html

相关文章:

  • 人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解
  • 华为机考真题 -- 螺旋数字矩阵
  • 防御笔记第四天(持续更新)
  • HUAWEI VRRP 实验
  • 领取serv00免费虚拟主机
  • 云开发技术的壁纸小程序源码,无需服务期无需域名
  • 基于Python的哔哩哔哩数据分析系统设计实现过程,技术使用flask、MySQL、echarts,前端使用Layui
  • 顺序结构 ( 四 ) —— 标准数据类型 【互三互三】
  • 科普文:jvm笔记
  • springboot对象参数赋值变化
  • 树形结构的一种便捷实现方案
  • 探索AI数字人的开源解决方案
  • 科普文:深入理解负载均衡(四层负载均衡、七层负载均衡)
  • 华为模拟器ensp中USG6000V防火墙web界面使用
  • 使用Python绘制气泡图
  • 政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类
  • 洞察消费者心理:Transformer模型在消费者行为分析的创新应用
  • 如何安全使用代理ip
  • 机器学习——LR、‌GBDT、‌SVM、‌CNN、‌DNN、‌RNN、‌Word2Vec等模型的原理和应用
  • 揭秘SQL Server数据库选项:性能与行为的调控者
  • 【排序 - 选择排序优化版(利用堆排序)】
  • PHP编程开发工具有哪些?
  • 火柴棒图python绘画
  • Nginx七层(应用层)反向代理:UWSGI代理uwsgi_pass篇
  • Effective C++笔记之二十一:One Definition Rule(ODR)
  • 探索未来:Transformer模型在智能环境监测的革命性应用
  • Nginx中文URL请求404
  • 33. 动量法(Momentum)介绍
  • Python | Leetcode Python题解之第228题汇总区间
  • 物联网应用,了解一点 WWAN全球网络标准