大数据经典论文解读
徐文浩
bothub 创始人
13843 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
大数据经典论文解读
15
15
1.0x
00:00/00:00
登录|注册

07 | MapReduce(二):不怕失败的计算框架

你好,我是徐文浩。
通过上节课的学习,现在你已经知道 MapReduce 的编程模型是怎么回事儿了。对于开发者来说,你只需要写一个 Map 函数和一个 Reduce 函数,就能完成数据处理过程。具体这些任务用了多少服务器,遇到了失败是怎么解决的,你并不需要关心。
不过,要想学习如何搭建和改进分布式系统,了解 MapReduce 的底层原理必不可少。今天,我们就一起来看看 MapReduce 的框架干了什么。MapReduce 这个“保姆”,为什么可以让你不需要处理复杂的分布式架构的问题。

MapReduce 框架的三个挑战

要想让写 Map 和 Reduce 函数的人不需要关心“分布式”的存在,那么 MapReduce 框架本身就需要解决好三个很重要的问题:
第一个,自然是如何做好各个服务器节点之间的“协同”,以及解决出现各种软硬件问题后的“容错”这两部分的设计。
第二个,是上一讲我们没怎么关心的性能问题。和我们在 GFS 论文里面讲过的一样,MapReduce 框架一样非常容易遇到网络性能瓶颈。尽量充分利用 MapReduce 集群的计算能力,并让整个集群的性能可以随硬件的增加接近于线性增长,可以说是非常大的一个挑战。
最后一个,还是要回到易用性。Map 函数和 Reduce 函数最终还是运行在多个不同的机器上的,并且在 Map 和 Reduce 函数中还会遇到各种千奇百怪的数据。当我们的程序在遭遇到奇怪的数据出错的时候,我们需要有办法来进行 debug。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

MapReduce是一种用于海量数据处理的计算框架,通过Map和Reduce函数实现数据处理,简化了分布式计算的复杂性。文章介绍了MapReduce面临的挑战,包括协同、性能和易用性,并探讨了其容错机制和性能优化策略。在容错方面,MapReduce不仅应对节点失效和master节点失效,还提供了对异常数据的容错机制。性能优化方面,通过将程序搬到数据所在的服务器、使用Combiner减少网络数据传输等方式提高了性能。此外,MapReduce还提供了易用性的功能,如单机运行的库、内嵌的HTTP服务器和计数器机制,方便开发者进行调试和监控程序执行情况。整体而言,MapReduce框架通过简单而有效的实现,使得开发者能够专注于数据处理逻辑的实现,而无需过多关注分布式架构的复杂问题。 尽管MapReduce框架已经作出了很多努力,但仍存在一些缺陷,包括用户意识不到“分布式”的存在以及性能不太理想。随着时间的变迁,新一代系统如Dremel和Spark逐步取代MapReduce,提供更快的数据处理能力。对于分布式系统,希望增加机器能带来同比例的性能提升,但实现起来很难。文章推荐阅读了一篇有关MapReduce任务优化的博文,以帮助读者理解MapReduce的遗憾与缺陷中提到的额外开销问题。 在处理数据时,数据不平衡可能导致MapReduce任务运行缓慢。MapReduce论文提出的解决方法是通过开发人员自己实现一个分区函数。然而,这也意味着开发人员需要意识到“分布式”的存在。如果要在MapReduce框架层面解决这一问题,可能需要寻找更好的办法来处理数据不平衡,以减少开发人员的工作量。 综上所述,MapReduce框架在海量数据处理方面具有重要意义,但也面临一些挑战和缺陷,需要不断优化和改进。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 在路上
    徐老师好,MapReduce的第一个问题后来通过SQL得到解决,编程界面更友好,第二个问题通过内存+硬盘混合存储得到了解决,内存保存中间数据更快,硬盘保存中间数据更稳定,中间数据丢失可以根据依赖的数据和逻辑重新生成。 回答老师的问题,如果不定制分区函数,数据会产生倾斜,那么可以给数据多的分区分配多一些Reduce程序,或者再次Hash。MapReduce在运行的最后阶段,会启动后备的Reduce程序,和运行较慢的Reduce程序处理同一个分区,哪个先完成就采用哪个结果,以此避免较慢的机器拖慢了整体处理时间。在最后的阶段,其实可以让MapReduce为一个分区启动多个Reduce程序,加速数据处理,减轻数据倾斜的影响。
    2021-10-06
    14
  • 星语心愿
    数据倾斜源自于Key值分布不均,一方面数据源本身key值分布不均(仅以行号作为key值不存在这个问题),可以事先预处理key值,使其分布均匀,或者增大分区解决;另一方面在shuffle混洗后发生数据倾斜,写入磁盘时增加分区数,增加reduce的并发处理量,加速数据处理,减轻数据倾斜的影响。
    2021-10-08
    5
  • qinsi
    坐时光机快进的话,现代的大数据框架大都提供了类似SQL的接口,于是任务的实现和优化就类似数据库中查询计划的生成和优化,对于使用者透明了
    2021-10-04
    1
    5
  • demo
    如果只是定期的进行checkpoint那么从checkpoint恢复的时候不是会丢失数据吗?
    2022-11-20归属地:北京
    1
  • 陈迪
    尝试回答思考题:(首先应该是reduce任务存在数据倾斜,map不存在这个问题) 1. 论文中提到的思路:map端本地先算掉一波(combiner),但要求计算任务满足结合律和交换律(commutative和associative) 2. 同样是论文中提到的思路:调参数,自动对倾斜的key任务,通过master,要求cluster manager分配更多的、等比例的资源 3. 猜想一波:还是在partition上做文章,自动对倾斜的key任务,添加一些参数,让这批key的record分开处理,再尝试聚合。但这个思路应该和本地combiner方法类似,对计算任务有要求。
    2021-10-06
    1
  • 泊浮目
    如果让你在 MapReduce 框架层面解决好这一个问题,你觉得有什么好办法吗?——现在的做法都是SQL做声明,底层用CBO做优化。
    2021-10-05
    1
  • Spoon
    Spark有针对数据倾斜的自动平衡机制
    2022-09-20
  • Joey
    针对于数据倾斜问题,在reduce前进行数据量预评估,对reduce进行重新分配,确保每个reduce的数据均衡
    2022-08-23归属地:广东
  • 大包子
    分区不平衡时,加一层负载均衡的机制,重新分配一下任务
    2022-06-04
  • Helios
    感觉调度系统和Map Reduce里面的Master做的事情有些重合呢,比如将任务分为多少个、如何找到距离任务最近的分片,感觉两者谁做都可以呢。
    2021-11-25
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部