首先,我先將這四種的定義列出來,之後咱們再通過簡單代碼進行分析。
RDD任務切分中間分爲:Application、Job、Stage和Task
(1)Application:初始化一個SparkContext即生成一個Application;
(2)Job:一個Action算子就會生成一個Job;
(3)Stage:Stage等於寬依賴的個數加1;
(4)Task:一個Stage階段中,最後一個RDD的分區個數就是Task的個數。
代碼:
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark_test {
def main(args: Array[String]): Unit = {
//創建SparkConf配置文件
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("test")
//創建SparkContext對象
val sc = new SparkContext(sparkConf)
//3. 創建RDD
val dataRDD: RDD[Int] = sc.makeRDD(List(1,2,3,4,1,2),2)
//3.1 聚合
val resultRDD: RDD[(Int, Int)] = dataRDD.map((_,1)).reduceByKey(_+_)
// Job:一個Action算子就會生成一個Job;
//3.2 job1打印到控制檯
resultRDD.collect().foreach(println)
//3.3 job2輸出到磁盤
resultRDD.saveAsTextFile("output")
Thread.sleep(10000000)
//釋放資源/關閉連接
sc.stop()
}
}
通過http://localhost:4040查看具體情況
至此,已經結束,不知道我說明白了沒?