常見的有map, flatmap, filter, sample ...
常見的有sortbykey, reducebykey, groupbykey, join ...
在spark中,每個任務對應乙個分割槽,通常不會跨分割槽運算元據。但如果遇到寬依賴的操作,spark必須從所有分割槽讀取資料,並查詢所有鍵的對應值,然後彙總在一起以計算每個鍵的最終結果,這稱為shuffle。
shuffle是一項昂貴的操作,因為它通常會跨節點運算元據,這會涉及磁碟 i/o,網路 i/o,和資料序列化。某些shuffle操作還會消耗大量的堆記憶體,因為它們使用堆記憶體來臨時儲存需要網路傳輸的資料。
言歸正傳,stage的劃分,是以result和shuffle這兩種型別來劃分task。對於窄依賴,由於分割槽依賴關係的確定性,partition的轉換處理可以在同乙個執行緒裡完成,稱之為resulttask。而對於寬依賴,只能等父rdd集的shuffle處理完成後,在下乙個stage才能開始接下來的計算,稱之為shufflemaptask。
因此劃分stage的規則如下:從後往前推rdd運算元,如果遇到寬依賴就斷開,劃分為乙個stage;如果遇到窄依賴就將這個rdd加入當前的stage。
舉個栗子,如下圖的spark任務應該被劃分為2個stage。
Spark中stage的劃分
如下為spark中劃分stage的原始碼 dagscheduler將job分解成具有前後依賴關係的多個stage dagscheduler是根據shuffledependency劃分stage的 stage分為shufflemapstage和resultstage 乙個job中包含乙個results...
Spark RDD的stage劃分和容錯
rdd resilient distributed dataset 彈性分布式資料集 rdd代表是乙個不可變的 可分割槽的 支援平行計算的元素集合 類似於scala中的不可變集合 rdd可以通過hdfs scala集合 rdd轉換 外部的資料集 支援inputformat 獲得 並且我們可以通知sp...
spark DAG的生成和劃分Stage
dag directed acyclic graph有向無環圖 指的是資料轉換執行的過程,有方向,無閉環 其實就是rdd執行的流程 原始的rdd通過一系列的轉換操作就形成了dag有向無環圖,任務執行時,可以按照dag的描述,執行真正的計算 資料被操作的乙個過程 開始 通過sparkcontext建立...