簡體   English   中英

Apache Spark如何實現改組階段?

[英]How does Apache Spark implement the shuffle phase?

我想知道Apache Spark如何實現改組階段。 它使用與MapReduce中相同的技術嗎? 例如 :

rddB = rddA.map1.groupByKey();
rddX = rddB.map2.map3.saveAsTextFile();
rddY = rddB.map4.map5.saveAsTextFile();

它是否執行map1然后按鍵分區並將中間數據保存在磁盤(內存)上?

然后讀取兩次中間文件,一次對map2 map3分支,一次對map4 map5,即使我們沒有對rddB進行隱式緩存,也無需重新計算rddB。

不,Spark的行為略有不同。 首先,當遇到您編寫的行時,Spark並不會實際執行操作,但是會創建要獲取給定RDD或結果的操作的DAG。 實際上,Spark的操作分為兩個主要類別:轉換和操作; 它僅在遇到動作時才執行它們。

此外,Spark僅在您告訴中間結果時才存儲中間結果,即在RDD上調用persistcache時。 如果您不這樣做,它將執行所有操作以獲得直到DAG根目錄的給定結果(即從文件中讀取它們)。

前面的陳述不是真的。 實際上,手冊在這里

即使用戶沒有調用持久化,Spark也會自動將一些中間數據持久化在隨機操作中(例如reduceByKey)。 這樣做是為了避免在混洗期間節點發生故障時重新計算整個輸入。 我們仍然建議用戶如果打算重復使用它,則對結果的RDD調用持久化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM