1. 程式人生 > >Spark學習之問題整理

Spark學習之問題整理

Stage中的一些問題:

1、stage中每一個task(管道計算模式)在什麼時候落地磁碟?

  1. 如果是stage後面是action類運算元:
    collect:將每一個管道的計算結果收集到Driver端的記憶體中。
    saveAsTextFile:將每一個管道的計算結果寫到指定記錄。
    count:將管道的計算結果統計記錄數,返回給Driver。

  2. 如果是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%的資料會重複

解決方案:

  • 關閉各種推測、重試機制。
  • 設定一張事務表。
    ETL

待更。。。。。。