Spark shuffle介紹:shuffle data生命周期
shuffle data持久化在磁盤上,如果一直不清理,磁盤容易被撐爆。那shuffle data什么時候會被清理呢。一般來說可以分成3種場景:
1、spark application主動停止,需要清理該application下所屬的全部shuffle data。清理流程如下(本文均以未啟用external shuffle service,spark 2.x代碼為例):
2、application存活,但某個階段的shuffle data不再需要,可以被刪除清理。這里核心是如何判斷某個shuffle data不再被需要。spark里是利用java的GC機制來判斷某個shuffle是否還需要使用。寬依賴會存在shuffle,在創建ShuffleDependency時會將該對象以弱引用的方式注冊在ContextCleaner,然后ContextCleaner周期性檢查該弱引用對象是否被GC回收了,如果回收說明該ShuffleDependency對象不再被依賴,即shuffle data不再被需要,可以被清理。為了避免一直未GC導致shuffle不被清理,ContextCleaner也會定期調用system.gc來建議GC。
3、機器異常掉電的情況,application來不及執行主動關閉邏輯進行shuffle清理。這種一般依賴外圍的資源管理如yarn的清理機制,或者需要在外圍添加周期性檢查程序,清理非存活application的所有shuffle數據。
EI企業智能 spark 智能數據 表格存儲服務 CloudTable
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。