【Spark篇】---Spark中Shuffle檔案的定址

LHBlog發表於2018-03-07

一、前述

Spark中Shuffle檔案的定址是一個檔案底層的管理機制,所以還是有必要了解一下的。

二、架構圖

三、基本概念:

1) MapOutputTracker

MapOutputTracker是Spark架構中的一個模組,是一個主從架構。管理磁碟小檔案的地址。

  • MapOutputTrackerMaster是主物件,存在於Driver中
  • MapOutputTrackerWorker是從物件,存在於Excutor中

2) BlockManager

BlockManager塊管理者,是Spark架構中的一個模組,也是一個主從架構。

  • BlockManagerMaster,主物件,存在於Driver中

BlockManagerMaster會在叢集中有用到廣播變數和快取資料或者刪除快取資料的時候,通知BlockManagerSlave傳輸或者刪除資料。

  • BlockManagerWorker,從物件,存在於Excutor中

BlockManagerWorker會與BlockManagerWorker之間通訊。

無論在Driver端的BlockManager還是在Excutor端的BlockManager都含有四個物件:

① DiskStore:負責磁碟的管理。

② MemoryStore:負責記憶體的管理。

③ ConnectionManager:負責連線其他的 BlockManagerWorker。

④ BlockTransferService:負責資料的傳輸。

 

四、Shuffle檔案定址流程

a) map task執行完成後,會將task的執行情況和磁碟小檔案的地址封裝到MpStatus物件中通過MapOutputTrackerWorker物件向Driver中的MapOutputTrackerMaster彙報。

b) 在所有的map task執行完畢後,Driver中就掌握了所有的磁碟小檔案的地址。

c) reduce task執行之前,會通過Excutor中MapOutPutTrackerWorker向Driver端的MapOutputTrackerMaster獲取磁碟小檔案的地址。

d) 獲取到磁碟小檔案的地址後,會通過BlockManager中的ConnectionManager連線資料所在節點上的ConnectionManager,然後通過BlockTransferService進行資料的傳輸。

e) BlockTransferService預設啟動5個task去節點拉取資料。預設情況下,5個task拉取資料量不能超過48M。拉取過來的資料放在Executor端的shuffle聚合記憶體中(spark.shuffle.memeoryFraction 0.2), 如果5個task一次拉取的資料放不到shuffle記憶體中會有OOM,如果放下一次,不會有OOM,以後放不下的會放磁碟。

 

五、擴充套件補充如何避免OOM

  1、拉去資料 少一些。

  2、提高ExecutorShuffle聚合記憶體。

  3、提高executor記憶體。

 

相關文章