Spark學習之問題整理
阿新 • • 發佈:2018-11-11
Stage中的一些問題:
1、stage中每一個task(管道計算模式)在什麼時候落地磁碟?
-
如果是stage後面是action類運算元:
collect:將每一個管道的計算結果收集到Driver端的記憶體中。
saveAsTextFile:將每一個管道的計算結果寫到指定記錄。
count:將管道的計算結果統計記錄數,返回給Driver。 -
如果是stage後面是stage:
在shuffle write階段會寫磁碟,目的是為了防止reduce task拉取資料失敗。倘若不寫入磁碟,一旦拉取失敗會重新向Map端拉取資料,會重新shuffle,寫入磁碟,直接在磁碟拉取就可以。
2、spark在計算的過程中,是不是非常消耗記憶體?
不是,因為stage的計算模式是管道計算模式。
3、什麼場景下最耗記憶體?
控制類運算元,cache
4、解釋一下如果管道中有cache邏輯,他是如何快取資料的?
會複製一份相同的資料進行快取。
5、RDD彈性分散式資料集,為什麼不能儲存資料,還依然叫資料集?
雖然RDD儲存的是邏輯,但是RDD具有管理資料的能力。
推測執行相關問題:
1、如果1T資料,單機執行30分鐘就能執行完畢,但是使用spark來計算(4個節點),需要2小時,為什麼?
原因:
1)計算髮生了資料傾斜(大量的資料給了少量的task,少量的資料給了大量的task);
2)開啟了推測執行機制,會複製多份掙扎task。
2、對於ETL(Extract Transform Load)型別的業務,開啟推測執行,重試機制,對於最終的結果會不會有影響?
會有影響。最終資料庫中會有重複的資料。比如,當task執行到90%的時候發生了錯誤,開啟重試機制,那麼這90%的資料會重複
解決方案:
- 關閉各種推測、重試機制。
- 設定一張事務表。