spark job stage task概念與區分

2021-10-10 15:37:24 字數 1256 閱讀 9008

job簡單講就是提交給spark的任務。

stage是每乙個job處理過程要分為的幾個階段。

task是每乙個job處理過程要分幾為幾次任務。

task是任務執行的最小單位。最終是要以task為單位執行在executor中。

job--

--> 乙個或多個stage--

-> 乙個或多個task

劃分stage的本質是依據是否需要shuffle,需要shuffle的過程和不需要shuffle的過程明顯不同,因此需要劃分stage.

如下圖,2個stage,遇到寬依賴,reducebykey之前乙個stage,之後乙個stage(stage劃分的依據是遇到寬依賴就劃分乙個新的stage)

轉換運算元與行動運算元結果不同. 行動運算元會將結果進行輸出.

當在程式中遇到乙個action運算元的時候,就會提交乙個job,執行前面的一系列操作。因此平時要注意,如果宣告了資料需要cache或者persist,但在action操作前釋放掉的話,該資料實際上並沒有被快取。

通常乙個任務會有多個job,job之間是按照序列的方式執行的。乙個job執行完成後,才會起下乙個job。有一段時間曾想讓job並行執行,但沒有找到解決方法。

sortby 底層呼叫collect,也算行動運算元.會生成乙個job

對於檔案而言,task的數量由分割槽數量決定,而分割槽數量預設又是由分片的數量決定的(未指定的情況下). 所以hdfs讀取的時候有多少分片,就要多少task

乙個job可以是多個task,其task數量=stage數量*每個stage task的數量

預設情況下乙個task對應cpu的乙個核。如果乙個executor可用cpu核數為8,那麼乙個executor中最多同是併發執行8個task;

job--

--> 乙個或多個stage--

-> 乙個或多個task

棧區,堆區,全域性區等概念

1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性區 靜態區 static 全...

OC中棧區與堆區的記憶體概念解析

棧區是先進後出,佇列是先進先出。棧區就相當於玻璃杯,往玻璃杯裡放奧利奧,第一塊放入的奧利奧,肯定是最後乙個拿出來。佇列就相當於掉了底的玻璃杯,最先放入的,必定最先掉出來。網上有個更絕的比喻 佇列是吃多了拉,棧區是吃多了吐。這裡解析的是棧區和堆區的記憶體問題,說到了棧區自然引出佇列,捎帶提一筆。言歸正...

OC中棧區與堆區的記憶體概念解析

棧區是先進後出,佇列是先進先出。棧區就相當於玻璃杯,往玻璃杯裡放奧利奧,第一塊放入的奧利奧,肯定是最後乙個拿出來。佇列就相當於掉了底的玻璃杯,最先放入的,必定最先掉出來。網上有個更絕的比喻 佇列是吃多了拉,棧區是吃多了吐。這裡解析的是棧區和堆區的記憶體問題,說到了棧區自然引出佇列,捎帶提一筆。言歸正...