本節書摘來自華章出版社《循序漸進學spark》一書中的第3章,第3.3節,作者 小象學院 楊 磊,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
3.3 spark存儲與i/o
前面已經講過,rdd是按照partition分區劃分的,是以rdd可以看作由一些分布在不同節點上的分區組成。由于partition分區與資料塊是一一對應的,是以rdd中儲存了partitionid與實體資料塊之間的映射。實體資料塊并非都儲存在磁盤上,也有可能儲存在記憶體中。
3.3.1 spark存儲系統概覽
spark i/o機制可以分為兩個層次:
1)通信層:用于master與slave之間傳遞控制指令、狀态等資訊,通信層在架構上也采用master-slave結構。
2)存儲層:同于儲存資料塊到記憶體、磁盤,或遠端複制資料塊。
下面介紹幾個spark存儲方面的功能子產品。
1)blockmanager:spark提供操作storage的統一接口類。
2)blockmanagermasteractor:master建立,slave利用該子產品向master傳遞資訊。
3)blockmanagerslaveactor:slave建立,master利用該子產品向slave節點傳遞控制指令,控制slave節點對block的讀寫。
4)blockmanagermaster: 管理actor通信。
5)diskstore:支援以檔案方式讀寫的方式操作block。
6)memorystore:
支援記憶體中的block讀寫。
7)blockmanagerworker: 對遠端異步傳輸進行管理。
8)connectionmanager:支援本地節點與遠端節點資料block的傳輸。
圖3-8概要性地揭示了spark存儲系統各個主要子產品之間的通信。

圖3-8 spark存儲系統概覽
3.3.2 blockmanager中的通信
存儲系統的通信仍然類似master-slave架構,節點之間傳遞指令與狀态。總體而言,master向slave傳遞指令,slave向master傳遞資訊和狀态。這些master與slave節點之間的資訊傳遞通過actor對象實作(關于actor的詳細功能會在下一節spark通信機制中講述)。但在blockmanager中略有不同,下面分别講述。
1)master節點上的blockmanagermaster包含内容如下:
①blockmanagermasteractor的actor引用。
②blockmanagerslaveactor的ref引用。
2)slave節點上的blockmanagermaster包含内容如下:
①blockmanagermasteractor的ref引用。
②blockmanagerslaveactor的actor引用。
其中,在ref與actor之間的通信由blockmanagermasteractor和blockmanagerslave-actor完成。這個部分相關的源碼篇幅較多,此處省略,感興趣的讀者請自行研究。