从0开始学大数据
李智慧
同程艺龙交通首席架构师,前Intel大数据架构师,《大型网站技术架构》作者
立即订阅
14333 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么说每个软件工程师都应该懂大数据技术?
免费
预习模块 (3讲)
预习 01 | 大数据技术发展史:大数据的前世今生
预习 02 | 大数据应用发展史:从搜索引擎到人工智能
预习 03 | 大数据应用领域:数据驱动一切
模块一 Hadoop大数据原理与架构 (7讲)
04 | 移动计算比移动数据更划算
05 | 从RAID看垂直伸缩到水平伸缩的演化
06 | 新技术层出不穷,HDFS依然是存储的王者
07 | 为什么说MapReduce既是编程模型又是计算框架?
08 | MapReduce如何让数据完成一次旅行?
09 | 为什么我们管Yarn叫作资源调度框架?
10 | 模块答疑:我们能从Hadoop学到什么?
模块二 大数据生态体系主要产品原理与架构 (7讲)
11 | Hive是如何让MapReduce实现SQL操作的?
12 | 我们并没有觉得MapReduce速度慢,直到Spark出现
13 | 同样的本质,为何Spark可以更高效?
14 | BigTable的开源实现:HBase
15 | 流式计算的代表:Storm、Flink、Spark Streaming
16 | ZooKeeper是如何保证数据一致性的?
17 | 模块答疑:这么多技术,到底都能用在什么场景里?
模块三 大数据开发实践 (8讲)
18 | 如何自己开发一个大数据SQL引擎?
19 | Spark的性能优化案例分析(上)
20 | Spark的性能优化案例分析(下)
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
23 | 大数据基准测试可以带来什么好处?
24 | 从大数据性能测试工具Dew看如何快速开发大数据系统
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
模块四 大数据平台与系统集成 (6讲)
26 | 互联网产品 + 大数据产品 = 大数据平台
27 | 大数据从哪里来?
28 | 知名大厂如何搭建大数据平台?
29 | 盘点可供中小企业参考的商业大数据平台
30 | 当大数据遇上物联网
31 | 模块答疑:为什么大数据平台至关重要?
模块五 大数据分析与运营 (5讲)
32 | 互联网运营数据指标与可视化监控
33 | 一个电商网站订单下降的数据分析案例
34 | A/B测试与灰度发布必知必会
35 | 如何利用大数据成为“增长黑客”?
36 | 模块答疑:为什么说数据驱动运营?
模块六 大数据算法 (6讲)
37 | 如何对数据进行分类和预测?
38 | 如何发掘数据之间的关系?
39 | 如何预测用户的喜好?
40 | 机器学习的数学原理是什么?
41 | 从感知机到神经网络算法
42 | 模块答疑:软件工程师如何进入人工智能领域?
智慧写给你的寄语 (1讲)
所有的不确定都是机会——智慧写给你的新年寄语
结束语 (2讲)
结束语 | 未来的你,有无限可能
第2季回归丨大数据之后,让我们回归后端
从0开始学大数据
登录|注册

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

李智慧 2018-11-27
上一期我们讨论了 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学大数据》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(54)

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

    作者回复: 👍🏻

    2018-12-25
    32
  • My dream
    老师,你讲的理论看的我头晕脑胀的,能不能讲点实战操作,搭建spark环境,通过案例来讲的话,对于我们这些初学学生来说是最直观,最容易弄明白它为什么会那么快,像你这样一味的讲理论,不讲实战,我们实在是吸收不了,理解不了你讲的这些知识点
    2018-11-28
    2
    17
  • 落叶飞逝的恋
    总结:Spark的优点就是能够动态根据计算逻辑的复杂度进行不断的拆分子任务,而实现在一个应用中处理所有的逻辑,而不像MapReduce需要启动多个应用进行计算。
    2018-11-27
    15
  • scorpiozj
    移动计算比移动数据划算 总结的真好 很多设计仔细想一想都是围绕这个中心

    关于开源
    1 准备好详细的使用 api文档并提供示例
    2 撰写设计思路 和竞品比较的优势 以及创新点
    3 提前联系若干团队使用产品 并请他们提供真实的提高效率的数据报告
    4 联系公关团队在知名技术论坛推广
    5 成立团队 及时响应开发者疑问 需求和pr等
    2018-11-28
    9
  • arn
    每一篇文章都认真的读了,有些东西还没真正的去在实际工作中体会到,但这种思维的启发还是受益匪浅。
    2018-11-28
    5
  • 纯洁的憎恶
    这两天的内容对我来说有些复杂,很多知识点没有理解透。针对“而 Spark 更细腻一点,将前一个的 Reduce 和后一个的 Map 连接起来,当作一个阶段持续计算,形成一个更加优雅、高效地计算模型”。这句话中“将前一个的 Reduce 和后一个的 Map 连接起来”在细节上该如何理解,这也是明显的串行过程,感觉不会比传统的MapReduce快?是因为不同阶段之间有可能并行么?

    作者回复: 引用楼下的评论回复

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

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

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

    2018-11-27
    4
  • 追梦小乐
    老师,我想请教几个问题:
    1、“根据每个阶段要处理的数据量生成相应的任务集合(TaskSet),每个任务都分配一个任务进程去处理”,是一个任务集合TaskSet启动一个进程,taskSet里面的任务是用线程计算吗?还是每个TaskSet里面的任务启动一个进程?

    2、task-time 图中红色密集的表示什么?

    3、Spark 的执行过程 的图中 Executor 中的 Cache 是表示内存吗?task和Executor不是在内存中的吗?

    作者回复: 每个任务一个进程

    很多红色线条,每条线代表一个任务

    cache理解成存储rdd的内存

    2018-11-27
    3
  • 对于hbase和高速发展的es,不知道您怎么看,他们的优缺点是什么?
    2019-03-07
    2
  • 落叶飞逝的恋
    现在回过头看,Spark的编程模型其实类似Java8的Steam编程模型
    2019-03-04
    1
    2
  • 张飞
    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
    2
  • Yezhiwei
    这里是学习过程中做的一些总结

    https://mp.weixin.qq.com/s/OyPRXAu9hR1KWIbvc20y1g

    作者回复: 👍👍👍

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

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

    2018-12-08
    2
  • felix
    老师有了解过微软sql server analysis service的tabular吗,内存型列式存储的数据库,数据压缩比很高。如果光做数据库查询的话,比spark还快很多,因为spark还要把数据load进内存。我们自己写了一个服务来分布聚合,还用redis以维度为key做缓存。
    2018-11-28
    2
  • Jack Zhu
    1.确定做开源的商业模式,是羊毛出在猪身上,还是送小羊推大羊等等
    2.确定组织投入人员
    3.建立社区,定期together讨论,为迭代版本做计划
    4.做一些必要商业推广和免费客户服务
    2018-11-28
    2
  • 羊小看
    spark的有向无环图,将一个阶段的输出,直接给到另一个阶段的输入,不需要再次启动应用,避免多次访问HDFS,避免多次调度,尤其是机器学习,上万次迭代的场景,且优先使用内存存储中间结果。
    2019-07-02
    1
  • 数据化分析
    希望能讲讲实际怎么操作。
    2018-12-14
    1
  • 兔子先生
    “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
    1
  • 白鸽
    Executor 从 Diver 下载执行代码,是整个程序 jar包?还是仅 Executor 计算任务对应的一段计算程序(经SparkSession初始化后的)?

    作者回复: 整个jar

    2018-11-30
    1
  • Riordon
    为何Spark可以更高效?
    1)MR使用多进程模型,Spark使用多线程模型,这样Spark构建一个可重用的资源池,而MR往往不会,MR会耗费更多的构建资源池的启动时间,Spark在进程内线程会竞争资源,导致Spark相比MR不稳定;
    2)对于多次读取的中间结果可以Cache,避免多次读盘,对于迭代计算友好;
    另外shuffle过程,貌似不管是MR还是Spark都是需要写盘的吧
    2018-11-27
    1
收起评论
54
返回
顶部