天天看點

《循序漸進學Spark》一 3.3 Spark存儲與I/O

本節書摘來自華章出版社《循序漸進學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存儲系統各個主要子產品之間的通信。

《循序漸進學Spark》一 3.3 Spark存儲與I/O

圖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完成。這個部分相關的源碼篇幅較多,此處省略,感興趣的讀者請自行研究。

繼續閱讀