JerryLead / SparkInternals

Notes talking about the design and implementation of Apache Spark

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于第三章的有些疑问

about17ka opened this issue · comments

你好,在第三章中第三页的图中有一幅插图我不太理解。
qq 20150722212641
图中stage1和stage2的任务是并发执行的吗?之前参考了http://dongxicheng.org/framework-on-yarn/apache-spark-multi-threads-model/ 这篇博客,得出多作业在spark中是可以并发执行的,然而图中stage1与stage2似乎也是并发关系,此外stage2中的两个lineage也是并发执行的吗?如果是,是不是表示在一个stage中的不同task也可以并发的执行?
此外,如果多作业在spark中能够并发执行,那么前后的数据依赖关系怎么处理?(举个例子,现在的资源够图中3个stage同时开始运算,然而stage0的计算需要stage1和stage2的计算结果,那么stage0是否是先判断自己做计算所需的rdd不足,然后再等待stage1和stage2完成任务?而且stage0是怎么被激发的?是在stage1结束之后被激发的吗?)
初学spark,很多不理解,希望能解惑,非常感谢

@about17ka
stage1和stage2可以并发执行,因为他们之间没有依赖关系,但具体实现是否是并行的,有点忘了,要review一下代码。

stage2中的两个lineage也是并发执行的,一共生成4个tasks,每个task执行一条黑色的线

stage1和stage2都是stage0的parent stage,stage0等待stage1和stage2都完成任务后,才能执行,之前stage0状态一直是pending。激发很容易,就是一个栈,stage0在栈底,上面是stage0和stage1

@JerryLead
首先很感谢你的回答,我对你回答的理解是:在资源足够的情况下,stage1与stage2中的所有task,只要没有依赖关系,都可以并发执行,而如果资源有限,则会按照顺序从stage1开始执行,不知是否正确。
再咨询一个问题,这种并发执行是否需要我们编写并行的scala程序才能实现?还是我们只需要写顺序的书写程序,而spark会调度程序并发的执行?

@about17ka

“在资源足够的情况下,stage1与stage2中的所有task,只要没有依赖关系,都可以并发执行”。正确。
“而如果资源有限,则会按照顺序从stage1开始执行,不知是否正确”。stage1和stage2里面的所有task都是ready-to-run,具体哪个task先被执行,要看调度器先调了哪个task。

“这种并发执行是否需要我们编写并行的scala程序才能实现?还是我们只需要写顺序的书写程序,而spark会调度程序并发的执行?”, 我们写的Scala程序只specify RDD之间的关系(也就是logic plan),Spark负责将logic plan转换成上面的physical plan,然后并发执行task,我们只能控制task的个数(也就是partition个数),其他并发由框架完成。

非常感谢您的回答