一、作业调度(Job scheduler)
在spark中,一个作业一般就是对一个RDD的action操作。当该操作发生时,调度器会根据记录,为这个程序构建一个若干阶段组成的DAG(有向无环图),如下:
每个阶段(stage)的划分标准是,尽可能多的包含连续的窄依赖(如上图的stage 2),各个阶段通过宽依赖对应的操作划分,如stage2、3之间的join操作。有了这个DAG,接下来调度器就用多个任务(可能在不同的worker上)来计算各个阶段的分区。
二、解析器(spark-shell)
需要注意的是,spark的解析器不止spark-shell,还有pyspark等,这里只是以spark-shell举例。
简单来说 shell 是逐行翻译命令,比如var
println(x)
那么对于第二行内容, shell 是先要创建一个 lines1 的类对象,这个类包含 x ,然后第二行的编译后结果为:
println(Lines1.getInstance().x)
总之, spark-shell 对应的,不是一般的 scala 解释器,而是经过加工的适用于 RDD 的特殊 scala 解释器。