讲说spark的资源调度和任务调度,基本的spark术语,这里不再多说,懂的人都懂了。。。
按照数字顺序阅读,逐渐深入理解:以下所有截图均为个人上传,不知道为什么总是显示别人的QQ,好尴尬,无所谓啦,开始吧~~
1 宽窄依赖与Stage划分:
上熟悉的图:
在 Spark 里每一个操作生成一个 RDD,RDD 之间连一条边,最后这些 RDD 和他们之间的边组成一个有向无环图,这个就是 DAG,Spark 内核会在需要计算发生的时刻绘制一张关于计算路径的有向无环图,也就是 DAG。有了DAG 图,Spark 内核下一步的任务就是根据 DAG 图将计算划分成 Stage,
上图:G 与 F 之间是宽依赖,所以把 G 和 F 分为两个 Stage,而 C 、D 到 F,E 到 F 都是窄依赖,所以 CDEF 最终划分为一个 Stage2,A 与 B 之间是宽依赖,B 与 G 之间是窄依赖,所以最终,A 被划分为一个 Stage1,因为 BG 的 stage 依赖于 stage1 和 stage2,所以最终把整个DAG 划分为一个 stage3,所以说,宽窄依赖的作用就是切割 job,划分 stage。
Stage:由一组可以并行计算的 task 组成。
Stage 的并行度:就是其中的 task 的数量。
与互联网业界的概念有些差异:在互联网的概念中,并行度是指可同时开辟的线程数,并发数是指每个线程中可处理的最大数据量,比如: 4 个线程,每个线程可处理的数据为 100 万条,那么并行度就是 4,并发量是 100 万;而对于 stage 而言,即使其中的 task是分批进行执行的,也都算在并行度中,比如,stage 中有 100 个 task,而这 100 个 task 分4 批次才能执行完,那么该 stage 的并行度也为 100。Stage 的并行度是由最后一个 RDD 的分区决定的。
2 资源调度 (有人喜欢那standalone client方式举例,那我这