分散式儲存原理
阿新 • • 發佈:2018-11-11
一、HDFS原理
- 當HDFS叢集啟動之時,DataNode會向NameNode傳送資訊,包括Block儲存位置,DataNode地址。
- Client向NameNode彙報當前上傳檔案的資訊(Block數量、檔案上傳時間、檔案許可權、擁有著)。
2.1 Client將大檔案切割成一個個的block塊(以字元為單位進行切割)。 - Client向NameNode傳送請求,獲得BlockId號,儲存Block。
3.1 Client拿到BlockId號和DataNode地址開始上傳檔案。
1)NameNode返回給Client一批地址後,這些DataNode之間形成一個PipeLine管道。
2)Client把Block塊切割成一個個Packet(64K)不斷地往管道中輸送。這樣可以實現併發執行儲存 ,從而提高上傳效率。
1.資料備份機制
考慮到資料安全問題,需要給資料進行備份,預設有兩個副本檔案。
- 第一個Block儲存在負載不是很高的一臺伺服器上。
- 第一個備份檔案Block儲存在與第一個Block不同的機架隨機一臺伺服器上。
- 第二個備份檔案儲存在與第一個備份檔案相同機架上的隨機一臺伺服器。
2.持久化機制
防止系統故障導致資料丟失,故採用持久化機制。
- 在NameNode啟動的過程中,生成edits和fsimage兩個空檔案;
- SecondaryNameNode拉取edits檔案進行重演,從而產生元資料,然後元資料與fsimage合併完成後,將新的fsimage(fsimage.CheckPoint)推送給NameNode;
- 在SecondaryNameNode讀取edits檔案的同時,NameNode會建立edits.new這個檔案,來儲存SecondaryNameNode在合併過程中,其他資料的操作。
3.安全模式
安全模式是HDFS所處的一種特殊狀態,在這種狀態下,檔案系統只接受讀資料請求(能檢視檔案目錄,但是無法讀取檔案內容),而不接受刪除、修改等變更請求。
安全模式下NameNode所做的工作:
- 載入fsimage,載入到記憶體中。
- 若edits檔案不為空,那麼namenode自己來合併。
- 檢查DataNode是否存活。
- 若DataNode死亡,則指揮DataNode進行備份操作。
4.NameNode的作用
- 接收客戶端的請求。
- 管理元資料(檔案的上傳時間、檔案許可權、檔案屬主)。
- 管理叢集。
- 收集DataNode彙報的Block列表資訊。
- 每一個DataNode的位置資訊。
5.DataNode作用
- 儲存源資料,向NameNode傳送心跳。
- 接收客戶端的讀請求。
6.HDFS寫流程
- client計算大檔案的block數量;
- client會向NameNode彙報(當前大檔案的block數,當前大檔案屬主、許可權,檔案上傳時間);
- client切割block;
- client向NameNode請求block塊的Id號以及地址;
- 由於NameNode掌控全域性,管理所有的DataNode,所以它將負載不高的DataNode地址返回給client;
- client拿到地址後,找到Data去上傳資料;
- Data將block儲存完畢後,會向NameNode彙報當前的儲存情況。
7.HDFS讀流程
- client請求NameNode獲得block的位置資訊,因為NameNode裡存放了block位置資訊的元資料。
- Namenode返回所有block的位置資訊,並將這些資訊返回給客戶端。
- 客戶端拿到block的位置資訊讀取block資訊,採用就近原則。
二、HDFS的搭建
搭建叢集的三種模式:
1.偽分散式:在一臺伺服器上,啟動多個程序,分別表示各個角色。
2.完全分散式:在多臺伺服器上,每臺伺服器啟動不同角色的程序,使用多臺伺服器組成HDFS叢集。
3.高可用的完全分散式:多一個NameNode的備份。