1. 程式人生 > >【Spark篇】---Spark中Shuffle文件的尋址

【Spark篇】---Spark中Shuffle文件的尋址

sta lock exe 數據 小文件 默認 節點 刪除 提高

一、前述

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內存。

【Spark篇】---Spark中Shuffle文件的尋址