3.3 Spark存儲與I/O
前面已經(jīng)講過,RDD是按照partition分區(qū)劃分的,所以RDD可以看作由一些分布在不同節(jié)點上的分區(qū)組成唉侄。由于partition分區(qū)與數(shù)據(jù)塊是一一對應的辙培,所以RDD中保存了partitionID與物理數(shù)據(jù)塊之間的映射。物理數(shù)據(jù)塊并非都保存在磁盤上啥箭,也有可能保存在內存中。
3.3.1 Spark存儲系統(tǒng)概覽
Spark I/O機制可以分為兩個層次:
1)通信層:用于Master與Slave之間傳遞控制指令治宣、狀態(tài)等信息急侥,通信層在架構上也采用Master-Slave結構。
2)存儲層:同于保存數(shù)據(jù)塊到內存侮邀、磁盤坏怪,或遠端復制數(shù)據(jù)塊。
下面介紹幾個Spark存儲方面的功能模塊绊茧。
1)BlockManager:Spark提供操作Storage的統(tǒng)一接口類铝宵。
2)BlockManagerMasterActor:Master創(chuàng)建,Slave利用該模塊向Master傳遞信息华畏。
3)BlockManagerSlaveActor:Slave創(chuàng)建鹏秋,Master利用該模塊向Slave節(jié)點傳遞控制命令,控制Slave節(jié)點對block的讀寫亡笑。
4)BlockManagerMaster:管理Actor通信侣夷。
5)DiskStore:支持以文件方式讀寫的方式操作block。
6)MemoryStore:支持內存中的block讀寫仑乌。
7)BlockManagerWorker:對遠端異步傳輸進行管理百拓。
8)ConnectionManager:支持本地節(jié)點與遠端節(jié)點數(shù)據(jù)block的傳輸琴锭。
圖3-8概要性地揭示了Spark存儲系統(tǒng)各個主要模塊之間的通信。
[插圖]
圖3-8 spark存儲系統(tǒng)概覽
3.3.2 BlockManager中的通信
存儲系統(tǒng)的通信仍然類似Master-Slave架構耐版,節(jié)點之間傳遞命令與狀態(tài)祠够。總體而言粪牲,Master向Slave傳遞命令古瓤,Slave向Master傳遞信息和狀態(tài)。這些Master與Slave節(jié)點之間的信息傳遞通過Actor對象實現(xiàn)(關于Actor的詳細功能會在下一節(jié)Spark通信機制中講述)腺阳。但在BlockManager中略有不同落君,下面分別講述。
1)Master節(jié)點上的BlockManagerMaster包含內容如下:
①BlockManagerMasterActor的Actor引用亭引。
②BlockManagerSlaveActor的Ref引用绎速。
2)Slave節(jié)點上的BlockManagerMaster包含內容如下:
①BlockManagerMasterActor的Ref引用。
②BlockManagerSlaveActor的Actor引用焙蚓。
其中纹冤,在Ref與Actor之間的通信由BlockManagerMasterActor和BlockManagerSlave-Actor完成。這個部分相關的源碼篇幅較多购公,此處省略萌京,感興趣的讀者請自行研究。