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,如下图


可以看到每个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。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容