Spark Applications, Jobs, Stages, and Tasks

Applications

一个spark Application由一个或多个job组成。

Jobs

一个job是由一个或多个stage组成的。对RDD每次执行一个action操作,都会触发提交一个job。

Stages

一个stage由一个或多个task组成。RDD经过一系列的转换会生成一个DAG,spark会根据宽依赖(wide dependency)将DAG划分为不同的stage。

Tasks

一个task负责处理RDD一个partition的数据。一个stage内部会启动多个task。
样例分析


在spark上运行如下代码

object SimpleApp {
  def main(args: Array[String]) {

    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)

    val rddA = sc.textFile("/tmp/xyx/textA")
    val rddB = sc.textFile("/tmp/xyx/textB")

    val rddAA = rddA.flatMap(line => line.split(",")).map(word => (word, 1))
    val rddBB = rddB.flatMap(line => line.split(",")).map(word => (word, 1))

    val rddAAA = rddAA.groupByKey(1)
    val rddBBB = rddBB.groupByKey(1)

    val rddC = rddAAA.join(rddBBB)

    rddC.count

    rddC.collect

    sc.stop()
  }
}

代码中运行了两个RDD的action(countcollect),所以这个spark的Application会启动2个job,如下图

Spark Applications, Jobs, Stages, and Tasks_第1张图片

可以看到每个job都是由3个stage组成的,只不过它们的前两个stage完全一样,所以Job 1的状态是skipped。
那么为什么是3个stage,是怎么划分的?
这就要看一下上面代码中RDD的转换有哪些是宽依赖,即 groupByKeyjoin。那么从rddA转换为rddAA是一个stage,rddB转换为rddBB是一个stage,最后上面两个stage的结果rddAAA和rddBBB到rddC为一个stage,一共3个stage。

进入到Job 0中,如下图,看一下具体的3个stage,每个stage里面启动了多个task。


Spark Applications, Jobs, Stages, and Tasks_第2张图片

你可能感兴趣的:(Spark Applications, Jobs, Stages, and Tasks)