1. 程式人生 > 資訊 >賽力斯 AITO 問界 M5 將於 3 月 5 日開啟交付:搭載鴻蒙車機和華為三電系統,24.98 萬起

賽力斯 AITO 問界 M5 將於 3 月 5 日開啟交付:搭載鴻蒙車機和華為三電系統,24.98 萬起

1. HDFS

HDFS是以流式資料訪問模式來儲存超大檔案的分散式檔案系統,能忍受節點故障且不丟失任何資料。

1.1 HDFS讀寫流程

1.1.1 讀流程

  1. Open:客戶端通過 DistributedFileSystem 呼叫 open() 來開啟它希望讀取的檔案。

  2. Get Black Locations:DistributedFileSystem 通過RPC來呼叫NameNode,來得到檔案起始塊的位置。對於每一個數據塊,NameNode都會返回存有該塊地址的DataNode地址。

  3. Read:DFSInputStream 是由 FSDataInputStream 封裝的物件,負責 DataNode 和 NameNode 之間的通訊。客戶端呼叫 DFSInputStream 的read()方法。

  4. Read:FSInputStream 會連線距離最近的檔案中第一個塊所在的 DataNode。通過對資料流反覆呼叫 read() 方法,資料就從DataNode傳輸到客戶端。

  5. Read:到達塊的末端時,DFSInputStream 關閉與這個 DataNode 的連線,然後尋找下一個塊的最佳(近)DataNode。

  6. Close:客戶端完成讀取後,呼叫FSDataInputStream 的close()方法

遇到故障怎麼辦?

在讀取資料時,如果DFSInputStream在於DataNode通訊時遇到錯誤,會嘗試從這個塊的另外一個最鄰近的DataNode讀取資料,也會記錄故障DataNode以保證以後不會反覆讀取該節點上後續的塊。DFSInputStream也會通過校驗和確認資料是否完整,如果發現塊有損壞,會從其他DataNode讀取其複本,同時通知給NameNode。

1.1.2 寫流程

  1. Open:客戶端通過對 DistributedFileSystem 呼叫 create() 來新建檔案。

  2. Create:DistributedFileSystem 會對 NameNode 進行 RPC 通訊,從而在 NameSpace 中新建一個檔案。 NameNode會執行不同的檢查來確保這個檔案不存在以及客戶端有新建檔案的許可權。NameNode 會為建立新檔案來記錄一條記錄。

  3. Write :DFSOutputStream 是由 FSDataOutputStream 封裝的物件,負責 DataNode 和 NameNode 之間的通訊。DFSOutputStream將資料分為一個個的資料包,寫入內部佇列,也就是Data Queue。

  4. Write Packet :DataStreamer 處理資料佇列,挑選出適合儲存資料複本的一組 DataNode,以此來要求 NameNode 分配新的資料塊。這樣一組 DataNode 構成一個 Pipeline,隨後資料包開始流式傳輸,先到第一個 DataNode,它存好之後傳送到第二個 DataNode,第二個存好之後發給第三個(假設複本數為3)

  5. Ack Packet :DFSOutputStream 維護著一個內部的資料包佇列來等待 DataNode 收到確認回執,這個佇列稱為 Ack Queue。等收到所有的 DataNode 的確認資訊,該資料包會從確認佇列刪掉。

  6. Close/Complete :客戶端完成資料的寫入後,對資料流呼叫 close() 方法。剩餘的所有資料包都會寫入 DataNode Pipelines,並聯繫到 NameNode 告知其檔案寫完之前,等待確認,也就是重複以上步驟直到完成。

遇到故障怎麼辦?

關閉Pipeline,吧佇列中的所有資料包都添加回資料佇列的最前端,以保障故障節點下游的DataNode不會遺漏任何一個數據包。為儲存在另一個正常DataNode的當前資料塊指定一個新的標識,並將該標識床第給NameNode,以保障故障DataNode在恢復之後可以刪除儲存的的部分資料塊。從pipeline中刪除故障的DataNode,基於兩個正常的DataNode構建一條新的管線。餘下的資料塊寫入Pipeline中正常的DataNode。

NameNode注意到塊的複本量不足時,會在另一個節點上建立一個新的複本。後續的資料塊繼續正常接受處理。

如果是多個DataNode呢?

這種情況比較少見,但只要有一個DataNode寫進去,操作就會成功,並且這個塊會在叢集中非同步複製,指導達到目標的複本數為止。