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