Spark 通訊架構

2022-07-16 04:24:10 字數 1877 閱讀 4636

spark2.x 版本使用 netty 通訊框架作為內部通訊元件。spark 基於 netty 新的 rpc

spark 通訊框架中各個元件(client/master/worker)可以認為是乙個個獨立的實

體,各個實體之間通過訊息來進行通訊。具體各個元件之間的關係圖如下: 

endpoint(client/master/worker)有1 個 inbox 和 n 個 outbox(n>=1,n 取決

於當前 endpoint 與多少其他的 endpoint 進行通訊,乙個與其通訊的其他 endpoint

對應乙個 outbox),endpoint 接收到的訊息被寫入 inbox,傳送出去的訊息寫入

outbox 並被傳送到其他 endpoint 的 inbox 中。

spark 通訊架構如下圖所示:

1) rpcendpoint:rpc 端點,spark 針對每個節點(client/master/worker)都稱

之為乙個 rpc 端點,且都實現 rpcendpoint 介面,內部根據不同端點的需求,設計

不同的訊息和不同的業務處理,如果需要傳送(詢問)則呼叫 dispatcher;

2) rpcenv:rpc 上下文環境,每個 rpc 端點執行時依賴的上下文環境稱為

rpcenv;

3) dispatcher:訊息分發器,針對於 rpc 端點需要傳送訊息或者從遠端 rpc

接收到的訊息,分發至對應的指令收件箱/發件箱。如果指令接收方是自己則存入收

件箱,如果指令接收方不是自己,則放入發件箱;

4) inbox:指令訊息收件箱,乙個本地 rpcendpoint 對應乙個收件箱,dispatcher

在每次向 inbox 存入訊息時,都將對應 endpointdata 加入內部 receiverqueue 中,

另外 dispatcher 建立時會啟動乙個單獨執行緒進行輪詢 receiverqueue,進行收件箱消

息消費;

5) rpcendpointref:rpcendpointref 是對遠端 rpcendpoint 的乙個引用。當我

們需要向乙個具體的 rpcendpoint 傳送訊息時,一般我們需要獲取到該 rpcendpoint

的引用,然後通過該應用傳送訊息。

6) outbox : 指 令 消 息 發 件 箱 , 對 於 當 前 rpcendpoint 來 說 , 一 個 目 標

rpcendpoint 對應乙個發件箱,如果向多個目標 rpcendpoint 傳送資訊,則有多個

outbox。當訊息放入 outbox 後,緊接著通過 transportclient 將訊息傳送出去。訊息

放入發件箱以及傳送過程是在同乙個執行緒中進行;

8) transportclient:netty 通訊客戶端,乙個 outbox 對應乙個 transportclient,

transportclient 不斷輪詢 outbox,根據 outbox 訊息的 receiver 資訊,請求對應的遠

程 transportserver;

9) transportserver : netty 通 信 服 務 端 , 一 個 rpcendpoint 對 應 一 個

transportserver,接受遠端訊息後呼叫 dispatcher 分發訊息至對應收發件箱;

根據上面的分析,spark 通訊架構的高層檢視如下圖所示:

Spark 中通訊架構

spark 中通訊框架的發展 1 spark 早期版本中採用 akka 作為內部通訊部件。2 spark 1.3 中引入 netty 通訊框架,為了解決 shuffle 的大資料傳輸問題使用。3 spark 1.6 中 akka 和 netty 可以配置使用,netty 完全實現了 akka 在 s...

Spark執行架構

job 包含多個task組成的平行計算,乙個dag觸發的作業,由action運算元觸發,在sparkcontext中通過runjob方法向spark提交job stage job的排程單位,每個job會根據rdd的寬依賴關係被切分成很多stage,每個stage中包含一組相同的task,這組task...

spark核心架構

driver部分的 sparkconf sparkcontext driver 部分 val conf new sparkconf val sc new sparkcontext conf end executor部分 分布到集群中的 比如 textfile flatman map worker 管...