spark论文阅读笔记(三)

来源:互联网 发布:php技术论坛 编辑:程序博客网 时间:2024/06/08 11:42

一、作业调度(Job scheduler

spark中,一个作业一般就是对一个RDDaction操作。当该操作发生时,调度器会根据记录,为这个程序构建一个若干阶段组成的DAG(有向无环图),如下:

spark论文阅读笔记(三)

每个阶段(stage)的划分标准是,尽可能多的包含连续的窄依赖(如上图的stage 2),各个阶段通过宽依赖对应的操作划分,如stage23之间的join操作。有了这个DAG,接下来调度器就用多个任务(可能在不同的worker上)来计算各个阶段的分区。

        对于容错机制可分开看:如果一个任务(如计算某个分区)执行失败,只要对应的stage的父类还存在,那么就在其他节点重新执行该任务。如果是整个阶段都失败了,那么就重新提交该阶段对应的任务。

 

二、解析器(spark-shell

需要注意的是,spark的解析器不止spark-shell,还有pyspark等,这里只是以spark-shell举例。

简单来说shell是逐行翻译命令,比如
var x=5
println(x)
那么对于第二行内容,shell是先要创建一个lines1的类对象,这个类包含x,然后第二行的编译后结果为:
println(Lines1.getInstance().x)
总之,spark-shell对应的,不是一般的scala解释器,而是经过加工的适用于RDD的特殊scala解释器。