問題導讀:
- spark 如何在1.6.0之後使用Netty替代了Akka?
- Spark Network Common怎麼實作?
- BlockTransfer 與 Shuffle 之間的聯系?
- Akka 實作原理是什麼?
解決方案:
一直以來,基于Akka實作的RPC通信架構是Spark引以為豪的主要特性,也是與Hadoop等分布式計算架構對比過程中一大亮點,但是時代和技術都在演化,從Spark1.3.1版本開始,為了解決大塊資料(如Shuffle)的傳輸問題,Spark引入了Netty通信架構,到了1.6.0版本,Netty居然完成取代了Akka,承擔Spark内部所有的RPC通信以及資料流傳輸。
網絡IO掃盲貼
在Linux作業系統層面,網絡操作即為IO操作,總共有:阻塞式,非阻塞式,複用模型,信号驅動和異步五種IO模型。其中
阻塞式IO操作請求發起以後,從網卡等待/讀取資料,核心/到使用者态的拷貝,整個IO過程中,使用者的線程都是處于阻塞狀态。
非阻塞與阻塞的差別在于應用層不會等待網卡接收資料,即在核心資料未準備好之前,IO将傳回E