Job :
是一個比task 和 stage 更大的邏輯概念,job 可以認爲是我們在driver 或是通過spark-submit 提交的程序中一個action ,在我們的程序中有很多action 所有也就對應很多的jobs
Stage:
是spark 中一個非常重要的概念 ,在一個job 中劃分stage 的一個重要依據是否有shuflle 發生 ,也就是是否會發生數據的重組 (重新組織數據)。在一個stage 內部會有很多的task 被執行,在同一個stage 中 所有的task 結束後才能根據DAG 依賴執行下一個stage 中的task.
在spark streaming中,一個application可以在時間維度上劃分爲無數個job, 一個job 有很多任務組成,每組任務可以任務是一個stage , 而Task 是spark 中另一個很重要的概念 ,
task 跟 partition block 等概念緊密相連 ,task 是執行job 的邏輯單元 ,在task 會在每個executor 中的cpu core 中執行
下面是一個基於streaming實時計算的wordcount案例:
1. 首先基於yarn-cluster的模式 提交一個wordcount application
2. 在sparkcontext配置中 Durations.seconds(1) 設置爲1秒,因此相隔1秒的時間段內的RDD數據 作爲計算對象 來觸發一個action,也就是一個job
3. 在id 爲4988的job中,根據wordcount的邏輯主要有兩個stage
4. 點擊id爲9977的 stage 即對應的foreach stage中,可以看到 該stage 由N個task來實際執行計算任務