13 | 同样的本质,为何Spark可以更高效?
该思维导图由 AI 生成,仅供参考
Spark 的计算阶段
- 深入了解
- 翻译
- 解释
- 总结
Spark相比于MapReduce具有更高效的计算架构,其灵活的计算模型能够根据应用的复杂程度分割成多个计算阶段,形成有向无环图DAG,从而提高运行性能。通过DAG的划分,Spark能够将一个应用切分成多个阶段,根据依赖关系有序执行各个计算阶段,实现大数据的分布式计算。此外,Spark优先使用内存进行数据存储,减少对HDFS的访问,提高执行速度。Spark的作业管理和执行过程也经过详细介绍,包括DAGScheduler的生成和管理、任务的分配和执行流程等。总的来说,Spark相对于Hadoop MapReduce具有更快的执行速度和更简单的编程实现,这得益于其简单的RDD编程模型、快速的DAG切分计算过程以及高效的内存存储。文章最后指出,Spark的流行是必然的,因为内存容量提升和成本降低,大数据机器学习需求增加,而Spark的灵活性和高效性使其成为大数据计算的新王者。
《从 0 开始学大数据》,新⼈⾸单¥68
全部留言(65)
- 最新
- 精选
- vivi懂了原理,实战其实很简单,不用急着学部署啊,操作,原理懂了,才能用好,我觉得讲得很好
作者回复: 👍🏻
2018-12-2570 - 纯洁的憎恶这两天的内容对我来说有些复杂,很多知识点没有理解透。针对“而 Spark 更细腻一点,将前一个的 Reduce 和后一个的 Map 连接起来,当作一个阶段持续计算,形成一个更加优雅、高效地计算模型”。这句话中“将前一个的 Reduce 和后一个的 Map 连接起来”在细节上该如何理解,这也是明显的串行过程,感觉不会比传统的MapReduce快?是因为不同阶段之间有可能并行么?
作者回复: 引用楼下的评论回复 落叶飞逝的恋 总结:Spark的优点就是能够动态根据计算逻辑的复杂度进行不断的拆分子任务,而实现在一个应用中处理所有的逻辑,而不像MapReduce需要启动多个应用进行计算。
2018-11-27412 - ming老师,有一句话我不太理解,请老师指导。“DAGScheduler 根据代码和数据分布生成 DAG 图”。根据代码生产DAG图我理解,但是为什么生成DAG图还要根据数据分布生成,数据分布不同,生成的DAG图也会不同吗?
作者回复: 数据分布删掉,谢谢指正。
2018-12-088 - 张飞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-017 - weiruan851.完备的技术说明文档是必须的,比如使用场景,常见问题,环境搭建,核心技术的原理等。 2.输出真实等使用案例,以及给解决实际问题带来等好处,比如如果没有我们的开源方案是怎么实现的,有了这个方案是怎么实现的,差异是什么 3.商业推广,找业界有名的公司站台,或者有名的技术大牛做宣传(头羊效应) 4.归根结底,还是得有开创性的技术,能解决现实中的某一类问题。
作者回复: 赞
2019-07-315 - 白鸽Executor 从 Diver 下载执行代码,是整个程序 jar包?还是仅 Executor 计算任务对应的一段计算程序(经SparkSession初始化后的)?
作者回复: 整个jar
2018-11-305 - 追梦小乐老师,我想请教几个问题: 1、“根据每个阶段要处理的数据量生成相应的任务集合(TaskSet),每个任务都分配一个任务进程去处理”,是一个任务集合TaskSet启动一个进程,taskSet里面的任务是用线程计算吗?还是每个TaskSet里面的任务启动一个进程? 2、task-time 图中红色密集的表示什么? 3、Spark 的执行过程 的图中 Executor 中的 Cache 是表示内存吗?task和Executor不是在内存中的吗?
作者回复: 每个任务一个进程 很多红色线条,每条线代表一个任务 cache理解成存储rdd的内存
2018-11-2725 - yang啊、老师现在的提问都好大,我现在是老虎吃天无从下爪啊 ^_^
作者回复: 有些问题不一定要得到答案或者回答出来,只是关注到了思考一下,就会有收获~
2018-11-274 - Yezhiwei这里是学习过程中做的一些总结 https://mp.weixin.qq.com/s/OyPRXAu9hR1KWIbvc20y1g
作者回复: 👍👍👍
2019-01-143 - 黑客不够黑“DAGScheduler 根据程序代码生成 DAG,然后将程序分发到分布式计算集群,按计算阶段的先后关系调度执行。Worker 收到任务后,启动 Executor 进程开始执行任务。Executor 先检查自己是否有 Driver 的执行代码,如果没有,从 Driver 下载执行代码,通过 Java 反射加载后开始执行。” 针对这一段话,我想多请教老师一些,我理解的DAGScheduler 根据程序代码生成 DAG,类似于关系型数据库优化器根据SQL生成执行计划,然后spark计算引擎根据这些计划去做计算,我的疑惑的是:DAG已经是根据代码生成的了,那Worker 还要从 Driver 下载执行代码去执行,我无法想象worker是如何执行代码的,能否帮忙解疑一下?
作者回复: SQL的执行计划和spark的dag,都是执行描述,可以用文本查看的,不包括执行代码。 worker下载应用程序的jar包,反射加载执行。第三模块spark源码优化有详细描述。
2018-12-143