mapreduce分为几个阶段(各个阶段做了什么)
mapreduce分为几个阶段(各个阶段做了什么)
2024-11-24 09:50:41  作者:瓶中藏  网址:https://m.xinb2b.cn/know/idb384601.html

今天抽时间又重新整体复习了下mapreduce在各个阶段的执行过程,感觉每一次学习都会有更大的收获,今天就把我学习到的东西全都和大家一起分享出来,方便自己梳理知识和记忆的同时,也希望能给其他小伙伴带来收获!每天进步一点点!


一.什么是MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

MapReduce的核心思想是“分而治之,先分后合”,即将一个大的、复杂的工作或任务,拆分成多个小的任务,并行处理,最终进行合并==。适用于大量复杂的、时效性不高的任务处理场景(大规模离线数据处理场景)。其中Map阶段就是分,Reduce阶段是合。

map:以一条记录为单位做映射~!主要做映射,变换,过滤,1进N出(进来1条记录出去N条记录)

reduce:以一组(相同Key数据为一组)为单位做计算~!主要做分解,缩小,归纳,一组进N出(进来一组记录出去N条记录)

map与reduce之间的衔接:键值对(Key,Value)

Key,Value):由map映射实现,键值对的键划分数据分组


mapreduce简单的过程

二.MapReduce运行过程

1.MapReduce大致运行过程


MapReduce的大致运行过程

MapReduce分为Map阶段和Reduce阶段,从上图中可以看出所有Map任务完成后才可以进行Reduce阶段,Reduce的输入来自于Map的输出,两者之间是有依赖的,不是并行关系。

3个split(分片)是可以并行运行的,代表3个map任务,一个切片对应一个map计算,默认情况下,以HDFS的一个块(block)的大小(默认128M)为一个分片。

那么思考一下,为什么不直接用一个block直接对应一个map计算?而是要在加一个split呢?

这就是在软件工程学当中经常提到的加一层解耦,block块的大小是固定的,split的大小默认情况下等于block块的大小,当然我们也是可以根据自己的需求来设置split的大小,可以大于块大小,也可以小于块大小,这样就可以满足未来不同项目组的不同需求了,用起来相当灵活了。

可以看出,map的个数(并行度)是由split的数量决定的,每个split对应一个map计算,默认情况下,一个split就是一个块,split是可以复用block偏移量,大小,location信息的,split可以根据block的location相关信息来找到对应副本的机器,然后map程序可以移动到相应的机器上进行计算,很好的实现了计算向数据移动的语义。

接下来介绍下分组和分区的概念:

分组:将相同key的value进行合并,key相等的话,将分到同一个组里面

分区:决定当前的key交给哪个reduce进行处理,默认情况下,根据key的hash值,对reduce个数取余

Reduce的阶段也可以设置多个reduce任务来计算,一个分区由一个reduce任务处理,每个reduce任务可以计算同一分组或多组中的数据。也就是说一个分区包含一个组或多个组中的数据。相同组的数据是不可切割开的,如果切开了,计算结果是不准确的。如果一个reduce任务中有多个组,那么需要开启多个线程来处理不同组中的数据,

reduce的个数(并行度)由人来决定,可以根据不同需求自己手动设置。

2.MapReduce一个map,reduce阶段的详细过程


一个MapReduce的详细过程

如上图所示,MapReduce整体分为Map端任务和Reduce端任务,整个MapReduce程序又分为如下5个阶段。

input

首先读取HDFS上的文件,分出若干个分片(split),split会将文件内容格式化为记录,以记录为单位调用map方法,每一条记录都会调用一次map方法。

map

经过map方法后,map的输出映射为key,value,key,value会参与分区计算,拿着key算出分区号(根据key的hash值,对reduce个数取余),最终map输出key,value,分区(partition)。

shuffle:即为洗牌(包括Map端shuffle和Reduce端shuffle)***重要阶段****

maptask的输出是一个文件(中间数据集),存在本地的文件系统中,也就是说中间数据集并不是存放到HDFS中的。假设这个文件中有50000条记录,那么如何将这50000条记录放到本地文件系统中呢?是要每产出一条就写一条吗?内存进程和磁盘多次进行切换,这样速度会很慢,此时就会出现一个环形内存缓冲区(默认大小为100M)

1.map端的shuffle

(1)溢写(spill

每个map处理之后的结果将会进入环形缓冲区。内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为spill,中文可理解为溢写。溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。比例默认是0.8,也就是当缓冲区的数据值已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。map task的输出结果还可以往剩下的20MB内存中写,互不影响。

(2)排序

当溢写线程启动后,需要对这80MB空间内的分区,key做排序(sort)。需要做一个2次排序,分区有序,且分区内key有序,保证未来相同一组key会相邻的排在一起。

(3)往磁盘溢写数据

当环形缓冲区达到阈值80%,开始将分区排序后的数据溢写磁盘变成文件,每次溢写会在磁盘上生成一个溢写文件,如果map的输出结果真的很大,有多次这样的溢写发生,磁盘上相应的就会有多个溢写文件存在。最终会产生多个小文件。

(4)merge合并

将spill生成的小文件进行合并,将多个溢写文件合并到一个文件,上面的每个小文件都是内部有序,外部无序的,所以在合并时做一个归并排序来达到合并后的文件是有序的。

map task结束,通过appmaster,appmaster通过reduce过来拉取数据。

2.reduce的shuffle:

(1)copy过程

简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过http方式请求map task所在的TaskTracker获取map task的输出文件。因为map task早已结束,这些文件就归TaskTracker管理在本地磁盘中

(2)merge合并

将每个map task的结果中属于自己分区的数据进行合并,同样做归并排序,使得相同分区的数据的key是有序的copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端更为灵活,它基于JVM的heap size设置,因为Shuffle阶段Reducer不运行,所以应该把绝大部分的内存都给Shuffle使用

reduce

将合并后的数据f直接输入到reduce函数,进行相关计算,产出最终结果。

output

将最终结果存放到HDFS上。

分析了MapReduce的运行过程,可以发现MapReduce都是反复地执行排序,合并操作,现在终于明白了有些人为什么会说:排序是hadoop的灵魂

  • 原汁原味的kfc土豆泥(学会KFC同款土豆泥)
  • 2024-11-24学会KFC同款土豆泥土豆去皮洗净切块,水开后蒸10分钟蒸到叉子轻易扎透压成泥保留一些颗粒牛奶和食盐拌匀土豆泥装入铺好保鲜膜的碗中压实淀粉黑胡椒粉生抽清水调匀煮沸土豆泥上淋上酱汁即可,。
  • 鹅和鸭的步态相同之处是什么(简述鹅和鸭的区别)
  • 2024-11-24简述鹅和鸭的区别鹅和鸭的步态相同之处是鹅步调从容,大模大样鸭子步调急促,有局促不安之相“鹅行鸭步”是形容行走时摇摆迟缓,象鹅和鸭走路一样鹅和鸭的区别外貌:鹅的额部有橙黄色或黑褐色肉质突起,颈长,嘴扁而阔,腿高尾短,脚。
  • 2023春节沈腾小品(2023年春节联欢晚会沈腾的小品坑)
  • 2024-11-242023年春节联欢晚会沈腾的小品坑今晚提前看了一眼春晚的节目,在小品里也就是对沈腾的小品有一些期待,毕竟他这几年在综艺节目以及电影里的表现还是不错的,起码能让你笑一笑,其他人还有谁?也许还有贾玲、张小斐,但今年她俩缺席了沈腾已经很努力。
  • 剩下的豆腐串怎么吃(想吃夜宵摊上的豆腐串)
  • 2024-11-24想吃夜宵摊上的豆腐串天气在一天天的变热,夏天很快就要来了要说夏天人气最旺的地方莫过于每天傍晚的夜宵摊了,烤串配啤酒,这似乎是夏天里必不可少的美食之一,点到烤串,豆腐串肯定是必不可少的,几乎是人手一串,不仅味道好,价格也便。
  • 宋太祖释兵权解密(宋太祖重建武德司)
  • 2024-11-24宋太祖重建武德司赵匡胤发动陈桥兵变,建宋代周作为过来人和亲历者,赵匡胤比任何人都更清楚当时后周制度上存在的漏洞,现在他要想办法堵上这些漏洞,以防历史重演陈桥兵变前,“都下哗言,将以出军之日策点检为天子,士民恐怖,争为。
  • 手机电池更耐用使用方法(如何让手机电池更耐用)
  • 2024-11-24如何让手机电池更耐用智能手机用的时间越长,当中的锂电池越来越不耐用是人们的共识当然,也有很多人觉得无所谓,因为“反正手机是一直充着电的”那么,如何才能让手机电池更耐用?有哪些注意事项?目前,手机用的电池几乎全部都是锂电池。
  • 上海哈弗f7优惠多少(上海哈弗F7最高优惠1.5万元)
  • 2024-11-24上海哈弗F7最高优惠1.5万元观望很久的哈弗F7终于降价了,长吉哈弗店09.17-09.17,店铺活动购车最高优惠11.83%,真是迫不及待的想要到店一睹哈弗F7的风采啊促销时间2022年09月17日至2022年09月17日哈弗F。
  • 月季花怎么修剪开花多(如何修剪月季花)
  • 2024-11-24如何修剪月季花修剪枝条:月季生长期应将影响生长的枝条剪掉,将枯枝、病枝、老枝剪除掉,还需对过长的枝条进行剪短疏除花蕾:将干瘪、萎蔫、偏小的花蕾及时摘除掉花后修剪:在花败之后,及时将植株上的残花剪除掉秋后修剪:在秋季。
  • 蜘蛛侠好莱坞红毯(好莱坞蜘蛛侠的猎艳史)
  • 2024-11-24好莱坞蜘蛛侠的猎艳史好莱坞“蜘蛛侠”的猎艳史,圈内圈外两开花,不输小李子23岁当选奥斯卡评委同时入围的有朱浩伟(卡梅隆、斯皮尔伯格的门徒)、LadyGaga等都是业界前辈可见汤姆赫兰德在好莱坞有多受宠代表作《复仇者联盟》。
  • 向来缘浅奈何今生(向来情深奈何缘浅)
  • 2024-11-24向来情深奈何缘浅我藏你在心里,写你在风里,是你,是梦,花的朦胧,人的放纵,江湖认平生心的凌乱,繁华最终绕眼,躲不过晴天,躲不开思念,无奈的天,宁静的夜,如此忧伤,如此凄凉单章的梦,彼岸的情,花开富贵,一个了无牵挂,一。
  • 农历把每月初一叫什么(国农历把每月初一称为朔日)
  • 2024-11-24国农历把每月初一称为朔日我国农历把每月初一称为朔日,每个月前十日为上旬,初一(即上旬上)为朔日中间十日为中旬,十五(即中旬中)为望日五月初五为端午节,亦称端阳九月初九为重九节,亦称重阳上下联前二句各为回文,末句共嵌四个名称旬。