21|分而治之:MapReduce如何解决大规模分布式计算问题
黄清昊
该思维导图由 AI 生成,仅供参考
你好,我是微扰君。
从今天开始,我们就真正开始学习算法在工业界应用了。和前面的章节不同,分布式系统篇的很多算法,一般都是由工程师们提出来的,为了解决一些大规模网络应用中的实际问题,比如为了解决海量网页排名而发明的 pagerank 算法、为了解决分布式系统中共识问题的 Raft 算法、常用的负载均衡算法一致性哈希等等。
因为都是在实际的工程场景下被发明出来的,这些算法,在现在的互联网架构中也经常能看到它们的身影,所以学习这些算法以及其背后解决的问题对我们的实际工作是有很大益处的。
话不多说,我们开始今天的学习——谷歌提出的 MapReduce 算法,知名的开源项目 Hadoop 其实就是对 MapReduce 的工业级实现之一。
为什么发明 MapReduce 算法
想要掌握一个解决实际生产环境中问题的算法或者框架,我们当然应该先来了解一下相关算法的诞生背景。
MapReduce 算法,作为谷歌知名的三驾马车之一,是早期谷歌对大规模分布式计算的最佳实践。他们当时(2004 年)发表了相关的论文,很清晰地描述了提出这个算法的目的。
当时的谷歌已经有很大的业务量了,每天都需要处理海量的数据,也有许多不同的业务场景,所以工程师们实现了数以百计的数据处理程序,用来实现网页抓取、日志汇总分析、计算倒排索引等任务。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
MapReduce算法是谷歌早期对大规模分布式计算的最佳实践之一,旨在解决海量数据处理问题。该算法借鉴了函数式编程语言中的map和reduce概念,通过将数据表示成key-value对的集合,实现数据转换和聚合操作。谷歌的MapReduce不仅是一种编程思想,更是一个真正意义上的分布式计算框架和系统,建立在GFS(Google File System)之上。在执行过程中,任务会被分成M个数据段,分发给各个节点进行计算任务。整个过程涉及数据分区、任务调度、中间结果缓存和落盘、数据读取和排序等环节。MapReduce算法的提出解决了谷歌面临的海量数据处理问题,为大规模分布式计算提供了一种高效的解决方案。 在分布式系统下,容错是一个重要问题。MapReduce算法通过监控和重新调度机制来处理worker故障,而对于master故障,可以通过定期记录状态信息或引入备份节点来实现快速恢复。MapReduce的成功推动了后续分布式计算框架的发展,如Hadoop、Spark、Flink等,这些框架在MapReduce的基础上进一步完善了分布式计算的机制,弥补了MapReduce的设计不足。 总的来说,MapReduce在互联网世界取得了巨大成功,为应用开发人员提供了简洁易用的API,封装了并行处理、数据分发、容错、负载均衡等技术细节,解放了开发人员,解决了海量数据处理问题。然而,MapReduce也存在设计不足之处,导致后续出现了更多新的分布式计算框架。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》,新⼈⾸单¥59
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- Paul Shan个人觉得MapReduce框架中master节点任务过重,成为关键节点,一旦出错,恢复比较麻烦,备份的话,要同步的信息也很多,容易成为瓶颈。2022-02-0812
- peter请教老师三个问题: Q1:数组求和中的“状态”是指什么? “number 数组中,我们希望统计出数值大于 5 的那些数向上取整的和”,循环遍历的写法,“但是这个写法引入了状态”。 这里的“状态”是指什么?是指“求和”吗? Q2:Java中,JDK中有map/reduce吗? Q3:master故障后恢复,是人工恢复还是自动恢复?2022-02-081
收起评论