對RDD的操做分爲transformation和action兩類,真正的做業提交運行發生在action以後,調用action以後會將對原始輸入數據的全部transformation操做封裝成做業並向集羣提交運行。這個過程大體能夠以下描述:git
接下來,理解 Spark 中RDD的依賴關係.github
Spark中RDD的粗粒度操做,每一次transformation都會生成一個新的RDD,這樣就會創建RDD之間的先後依賴關係,在Spark中,依賴關係被定義爲兩種類型,分別是窄依賴和寬依賴spa
圖中左邊都是窄依賴關係,能夠看出分區是1對1的。右邊爲寬依賴關係,有分區是1對多。(map,filter,union屬於第一類窄依賴).net
stage的劃分是Spark做業調度的關鍵一步,它基於DAG肯定依賴關係,藉此來劃分stage,將依賴鏈斷開,每一個stage內部能夠並行運行,整個做業按照stage順序依次執行,最終完成整個Job。實際應用提交的Job中RDD依賴關係是十分複雜的,依據這些依賴關係來劃分stage天然是十分困難的,Spark此時就利用了前文提到的依賴關係,調度器從DAG圖末端出發,逆向遍歷整個依賴關係鏈,遇到ShuffleDependency(寬依賴關係的一種叫法)就斷開,遇到NarrowDependency就將其加入到當前stage。stage中task數目由stage末端的RDD分區個數來決定,RDD轉換是基於分區的一種粗粒度計算,一個stage執行的結果就是這幾個分區構成的RDD。orm
圖中能夠看出,在寬依賴關係處就會斷開依賴鏈,劃分stage,這裏的stage1不須要計算,只須要計算stage2和stage3,就能夠完成整個Job。blog
參考博客:https://blog.csdn.net/mahuacai/article/details/51919615文檔