从 0 开始学大数据
李智慧
同程艺龙交通首席架构师,前 Intel 大数据架构师,《大型网站技术架构》作者
71151 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
智慧写给你的寄语 (1讲)
从 0 开始学大数据
15
15
1.0x
00:00/00:00
登录|注册

13 | 同样的本质,为何Spark可以更高效?

生成作业
生成计算阶段
action函数
转换函数
宽依赖
窄依赖
shuffle
任务集合
依赖关系
有向无环图
商业和非商业活动
Executor进程
Worker
Cluster Manager
Driver进程
DAGScheduler
RDD函数
计算阶段划分依据
DAG
公司开源软件的运作
Spark的开源运作
编程体验和执行效率
机器学习需求增加
内存容量提升和成本降低
使用内存存储中间计算结果
DAG切分的多阶段计算过程
RDD的编程模型
Spark的执行过程
Spark的作业管理
Spark的计算阶段
思考题
Spark的流行原因
Spark的特性
Spark的架构原理
参考文章

该思维导图由 AI 生成,仅供参考

上一期我们讨论了 Spark 的编程模型,这期我们聊聊Spark 的架构原理。和 MapReduce 一样,Spark 也遵循移动计算比移动数据更划算这一大数据计算基本原则但是和 MapReduce 僵化的 Map 与 Reduce 分阶段计算相比,Spark 的计算框架更加富有弹性和灵活性,进而有更好的运行性能。

Spark 的计算阶段

我们可以对比来看。首先和 MapReduce 一个应用一次只运行一个 map 和一个 reduce 不同,Spark 可以根据应用的复杂程度,分割成更多的计算阶段(stage),这些计算阶段组成一个有向无环图 DAG,Spark 任务调度器可以根据 DAG 的依赖关系执行计算阶段。
还记得在上一期,我举了一个比较逻辑回归机器学习性能的例子,发现 Spark 比 MapReduce 快 100 多倍。因为某些机器学习算法可能需要进行大量的迭代计算,产生数万个计算阶段,这些计算阶段在一个应用中处理完成,而不是像 MapReduce 那样需要启动数万个应用,因此极大地提高了运行效率。
所谓 DAG 也就是有向无环图,就是说不同阶段的依赖关系是有向的,计算过程只能沿着依赖关系方向执行,被依赖的阶段执行完成之前,依赖的阶段不能开始执行,同时,这个依赖关系不能有环形依赖,否则就成为死循环了。下面这张图描述了一个典型的 Spark 运行 DAG 的不同阶段。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spark相比于MapReduce具有更高效的计算架构,其灵活的计算模型能够根据应用的复杂程度分割成多个计算阶段,形成有向无环图DAG,从而提高运行性能。通过DAG的划分,Spark能够将一个应用切分成多个阶段,根据依赖关系有序执行各个计算阶段,实现大数据的分布式计算。此外,Spark优先使用内存进行数据存储,减少对HDFS的访问,提高执行速度。Spark的作业管理和执行过程也经过详细介绍,包括DAGScheduler的生成和管理、任务的分配和执行流程等。总的来说,Spark相对于Hadoop MapReduce具有更快的执行速度和更简单的编程实现,这得益于其简单的RDD编程模型、快速的DAG切分计算过程以及高效的内存存储。文章最后指出,Spark的流行是必然的,因为内存容量提升和成本降低,大数据机器学习需求增加,而Spark的灵活性和高效性使其成为大数据计算的新王者。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学大数据》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(65)

  • 最新
  • 精选
  • vivi
    懂了原理,实战其实很简单,不用急着学部署啊,操作,原理懂了,才能用好,我觉得讲得很好

    作者回复: 👍🏻

    2018-12-25
    70
  • 纯洁的憎恶
    这两天的内容对我来说有些复杂,很多知识点没有理解透。针对“而 Spark 更细腻一点,将前一个的 Reduce 和后一个的 Map 连接起来,当作一个阶段持续计算,形成一个更加优雅、高效地计算模型”。这句话中“将前一个的 Reduce 和后一个的 Map 连接起来”在细节上该如何理解,这也是明显的串行过程,感觉不会比传统的MapReduce快?是因为不同阶段之间有可能并行么?

    作者回复: 引用楼下的评论回复 落叶飞逝的恋 总结:Spark的优点就是能够动态根据计算逻辑的复杂度进行不断的拆分子任务,而实现在一个应用中处理所有的逻辑,而不像MapReduce需要启动多个应用进行计算。

    2018-11-27
    4
    12
  • ming
    老师,有一句话我不太理解,请老师指导。“DAGScheduler 根据代码和数据分布生成 DAG 图”。根据代码生产DAG图我理解,但是为什么生成DAG图还要根据数据分布生成,数据分布不同,生成的DAG图也会不同吗?

    作者回复: 数据分布删掉,谢谢指正。

    2018-12-08
    8
  • 张飞
    1.“而 Spark 更细腻一点,将前一个的 Reduce 和后一个的 Map 连接起来,当作一个阶段持续计算,形成一个更加优雅、高效地计算模型”,stage之间是串行的,即便前一个的reduce和后一个的map连接起来,也是要从前一个stage的计算节点的磁盘上拉取数据的,这跟mapreduce的计算是一样的,老师所说的高效在这里是怎么提现的呢? 2. spark的内存计算主要体现在shuffle过程,下一个stage拉取上一个stage的数据的时候更多的使用内存,在这里区分出与mapreduce计算的不同,别的还有什么阶段比mapreduce更依赖内存的吗? 3.我是不是可以这样理解,如果只有map阶段的话,即便计算量很大,mapreduce与spark的计算速度上也没有太大的区别? 可能问题问的不够清晰,希望老师解答一下。

    作者回复: 1 Spark的map和reduce的划分要更优雅一点,比如宽依赖和窄依赖,编程上看不出明显的map和reduce,这种优雅还有很多,多写一些spark和MapReduce程序就能感受到。 2 如果内存够用,Spark几乎总是使用内存。 3 可以这么理解。

    2019-03-01
    7
  • weiruan85
    1.完备的技术说明文档是必须的,比如使用场景,常见问题,环境搭建,核心技术的原理等。 2.输出真实等使用案例,以及给解决实际问题带来等好处,比如如果没有我们的开源方案是怎么实现的,有了这个方案是怎么实现的,差异是什么 3.商业推广,找业界有名的公司站台,或者有名的技术大牛做宣传(头羊效应) 4.归根结底,还是得有开创性的技术,能解决现实中的某一类问题。

    作者回复: 赞

    2019-07-31
    5
  • 白鸽
    Executor 从 Diver 下载执行代码,是整个程序 jar包?还是仅 Executor 计算任务对应的一段计算程序(经SparkSession初始化后的)?

    作者回复: 整个jar

    2018-11-30
    5
  • 追梦小乐
    老师,我想请教几个问题: 1、“根据每个阶段要处理的数据量生成相应的任务集合(TaskSet),每个任务都分配一个任务进程去处理”,是一个任务集合TaskSet启动一个进程,taskSet里面的任务是用线程计算吗?还是每个TaskSet里面的任务启动一个进程? 2、task-time 图中红色密集的表示什么? 3、Spark 的执行过程 的图中 Executor 中的 Cache 是表示内存吗?task和Executor不是在内存中的吗?

    作者回复: 每个任务一个进程 很多红色线条,每条线代表一个任务 cache理解成存储rdd的内存

    2018-11-27
    2
    5
  • yang
    啊、老师现在的提问都好大,我现在是老虎吃天无从下爪啊 ^_^

    作者回复: 有些问题不一定要得到答案或者回答出来,只是关注到了思考一下,就会有收获~

    2018-11-27
    4
  • Yezhiwei
    这里是学习过程中做的一些总结 https://mp.weixin.qq.com/s/OyPRXAu9hR1KWIbvc20y1g

    作者回复: 👍👍👍

    2019-01-14
    3
  • 黑客不够黑
    “DAGScheduler 根据程序代码生成 DAG,然后将程序分发到分布式计算集群,按计算阶段的先后关系调度执行。Worker 收到任务后,启动 Executor 进程开始执行任务。Executor 先检查自己是否有 Driver 的执行代码,如果没有,从 Driver 下载执行代码,通过 Java 反射加载后开始执行。” 针对这一段话,我想多请教老师一些,我理解的DAGScheduler 根据程序代码生成 DAG,类似于关系型数据库优化器根据SQL生成执行计划,然后spark计算引擎根据这些计划去做计算,我的疑惑的是:DAG已经是根据代码生成的了,那Worker 还要从 Driver 下载执行代码去执行,我无法想象worker是如何执行代码的,能否帮忙解疑一下?

    作者回复: SQL的执行计划和spark的dag,都是执行描述,可以用文本查看的,不包括执行代码。 worker下载应用程序的jar包,反射加载执行。第三模块spark源码优化有详细描述。

    2018-12-14
    3
收起评论
显示
设置
留言
65
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部