业务开发算法 50 讲
黄清昊
Hashdata 数据库内核工程师,LeetCode 高赞答主,公众号微扰理论作者
23292 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
业务开发算法 50 讲
15
15
1.0x
00:00/00:00
登录|注册

21|分而治之:MapReduce如何解决大规模分布式计算问题

定时设置checkpoint
控制节点监控
用户重新提交任务
状态信息保存到磁盘(检查点)
定时ping操作
master节点监控和重新调度
生成更小的(key, value)集合
对(key, value)进行合并计算
生成新的(key, value)集合
对输入的每个(key, value)进行变换
分布式计算的未来趋势
新框架与MapReduce的对比
MapReduce机制的不足之处
探讨新的分布式计算框架的产生原因
分析MapReduce的设计不足
故障恢复
故障检测
启发了Hadoop、Spark、Flink等框架
抽象了分布式计算的复杂性
master故障
worker故障
reduce计算和结果汇总
map计算和中间结果存储
任务调度
数据分区
全局共享的存储系统(如GFS)
master进程和worker进程
M个map任务和R个reduce任务
输入文件分成M个数据段
适用于单机和分布式系统
代码逻辑清晰
map、filter、reduce等原语
Reduce
Map
工程师不需关心并行计算、数据冗余、负载均衡等细节
解决大规模数据处理的通用模型
面对海量数据处理的需求
2004年发表的论文
谷歌的大规模分布式计算实践
思考与讨论
课后作业
容灾能力
MapReduce的影响
容错机制
执行过程
分布式实现
函数式编程
核心概念
MapReduce的诞生
背景
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
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Paul Shan
    个人觉得MapReduce框架中master节点任务过重,成为关键节点,一旦出错,恢复比较麻烦,备份的话,要同步的信息也很多,容易成为瓶颈。
    2022-02-08
    1
    2
  • peter
    请教老师三个问题: Q1:数组求和中的“状态”是指什么? “number 数组中,我们希望统计出数值大于 5 的那些数向上取整的和”,循环遍历的写法,“但是这个写法引入了状态”。 这里的“状态”是指什么?是指“求和”吗? Q2:Java中,JDK中有map/reduce吗? Q3:master故障后恢复,是人工恢复还是自动恢复?
    2022-02-08
    1
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部