在工作中经常碰到很多同事只会用sparksql进行数据分析,但是碰到问题了不知道该如何解决,对Spark的基本概念没有了解,也不会通过查看监控页面来分析解决问题。
这篇文章就讲讲spark的基本概念。
- Application
- Driver
- Job
- Stage
- Task
- Executor
Application
当你写完了一个spark程序,提交到YARN后,进入YARN的页面,会看到这个程序的信息。比如说我们下图id为application_1544843719855_0001的程序,这个程序是我启动了一个spark-shell,这就是我们所说的Application。

image.png
Driver
Driver指的是你的Application的main函数,在main函数中创建SparkContext准备Spark程序的运行环境。
Job
Job对应的是RDD中的Action操作,我们知道RDD有两种类型的操作,Transform操作和Action操作,其中Transform操作是懒加载的,只有当Action操作出现,Transform操作才会被执行,而一个action操作产生一个job。比如最简单的wordcount程序,启动spark-shell运行wordcount,只有当调用collect()函数的时候才会产生一个job,进入spark页面可以看到它。
Spark context available as sc (master = yarn-client, app id = application_1544843719855_0004).
SQL context available as sqlContext.
scala> val lines = sc.textFile("/user/cloudera/test/123")
lines: org.apache.spark.rdd.RDD[String] = /user/cloudera/test/123 MapPartitionsRDD[1] at textFile at <console>:27
scala> val rdd = lines.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
rdd: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:29
scala> rdd.collect().foreach(println)
(hello,3)
(world,1)
(hi,2)

image.png
Stage
继续刚才的程序,点击id为0的job,进入stage的页面,可以看到这个job产生了两个stage,stage 0 是map,stage 1 是reducebykey

image.png
Task
点击id 为0的stage,进入看到一堆统计信息,可以看到这个stage是有两个task组成的,而这两个task是由Executor执行的。

image.png
Executor
点击Executors菜单可以看到分配给这个application的所有Executor,和每个Executor的状态和执行task的统计信息,如图。

image.png
网友评论