Spark 中通訊架構

2021-10-24 09:39:23 字數 1601 閱讀 9294

spark 中通訊框架的發展:

1、spark 早期版本中採用 akka 作為內部通訊部件。

2、spark 1.3 中引入 netty 通訊框架,為了解決 shuffle 的大資料傳輸問題使用。

3、spark 1.6 中 akka 和 netty 可以配置使用,netty 完全實現了 akka 在 spark 中的功能。

4、spark 2 系列中,不再使用 akka,使用 netty。

架構圖為:

rpc 通訊終端,spark 針對每個節點(client/master/worker) 都稱之為乙個 rpc 終端,且都實現 rpcendpoint 介面,內部根據不同端點的需求,設計不同的訊息和不同的業務處理,如果需要傳送(詢問)則呼叫 dispatcher。在 spark 中,所有的終端都存在生命週期:

(1) constructor

(2) onstart

(3) receive

(4) onstop

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 將訊息傳送出去。訊息放入發件箱以及傳送過程是在同乙個執行緒中進行。

7、rpcaddress

表示遠端的 rpcendpointref 的位址,host + port。

8、transportclient

netty 通訊客戶端,乙個 outbox 對應乙個 transportclient,transportclient 不斷輪詢 outbox,根據 outbox 訊息的 receiver 資訊,請求對應的遠端 transportserver。

9、transportserver

netty 通訊服務端,乙個 rpcendpoint 對應乙個transportserver,接受遠端訊息後呼叫 dispatcher 分發訊息至對應收發件箱。

Spark 通訊架構

spark2.x 版本使用 netty 通訊框架作為內部通訊元件。spark 基於 netty 新的 rpc spark 通訊框架中各個元件 client master worker 可以認為是乙個個獨立的實 體,各個實體之間通過訊息來進行通訊。具體各個元件之間的關係圖如下 endpoint cli...

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 管...