HDFS-文件讀寫流程

上一篇我們詳細地介紹了 HDFS 中各個模塊的功能以及原理,這一篇我們來詳細的介紹一下文件讀取的流程。

1.讀文件的流程

如圖所示,讀文件的流程主要包括以下6個步驟:

  1. 打開分散式文件:調用分散式文件 DistributedFileSystem.open( ) 方法;
  2. 定址請求:從 NameNode 處得到 DataNode 的地址,DistributedFileSystem使用 RPC 方式調用了NameNode,NameNode 返回存有該副本的DataNode 地址,DistributedFileSystem 返回了一個輸入流對象(FSDataInputStream),該對象封裝了輸入流 DFSInputStream;
  3. 連接到DataNode:調用輸入流 FSDataInputStream.read( ) 方法從而讓DFSInputStream 連接到 DataNodes;
  4. 從 DataNode 中獲取數據:通過循環調用 read( ) 方法,從而將數據從 DataNode 傳輸到客戶端;
  5. 讀取另外的 DataNode 直到完成:到達塊的末端時候,輸入流 DFSInputStream 關閉與 DataNode 連接, 尋找下一個 DataNode;
  6. 完成讀取,關閉連接:即調用輸入流 FSDataInputStream.close( );

2.寫文件流程

  1. 發送創建文件請求:調用分散式文件系統 DistributedFileSystem.create( )方法;
  2. NameNode 創建文件記錄:分散式文件系統 DistributedFileSystem 發送 RPC 請求給 NameNode,NameNode 檢查許可權後創建一條記錄,返回輸出流 FSDataOutputStream,封裝了輸出流 DFSOutputDtream;
  3. 客戶端寫入數據:輸出流 DFSOutputDtream 將數據分成一個個的數據包,並寫入內部隊列。DataStreamer 根據 DataNode 列表來要求 NameNode 分配適合的新塊來存儲數據備份。 一組 DataNode 構成管線(管線的 DataNode 之間使用 Socket 流式通信);
  4. 使用管線傳輸數據:DataStreamer 將數據包流式傳輸到管線第一個DataNode,第一個 DataNode 再傳到第二個DataNode,直到完成;
  5. 確認隊列:DataNode 收到數據後發送確認,管線的 DataNode 所有的確認組成一個確認隊列。所有 DataNode 都確認,管線數據包刪除;
  6. 關閉:客戶端對數據量調用 close( ) 方法。將剩餘所有數據寫入DataNode管線,聯繫NameNode並且發送文件寫入完成信息之前等待確認;
  7. NameNode確認:
  8. 故障處理:若過程中發生故障,則先關閉管線,把隊列中所有數據包添加回去隊列,確保數據包不漏。為另一個正常 DataNode 的當前數據塊指定一個新的標識,並將該標識傳送給 NameNode,一遍故障 DataNode 在恢復後刪除上面的不完整數據塊。從管線中刪除故障 DataNode 並把餘下的數據塊寫入餘下正常的 DataNode。NameNode 發現複本兩不足時,會在另一個節點創建一個新的複本;

在數據的讀取過程中難免碰到網路故障,臟數據,DataNode 失效等問題,這些問題 HDFS 在設計的時候都早已考慮到了。下面來介紹一下數據損壞處理流程:

  • 當 DataNode 讀取 block 的時候,它會計算 checksum。
  • 如果計算後的 checksum,與 block 創建時值不一樣,說明該 block 已經損壞。
  • Client 讀取其它 DataNode上的 block。
  • NameNode 標記該塊已經損壞,然後複製 block 達到預期設置的文件備份數 。
  • DataNode 在其文件創建後驗證其 checksum。

理解HDFS架構優缺點

HDFS優點:

  1. 數據冗餘,硬體容錯
  2. 處理流式的數據訪問(一次寫入,多次讀取的操作)
  3. 適合存儲大文件
  4. 可構建在廉價的機器上

缺點:

  1. 不適合低延遲的數據訪問
  2. 不適合小文件的存儲
  3. 不支持多用戶寫入及任意修改文件

如果覺得文章不錯,歡迎轉發點贊,另外有錯誤歡迎留言指出,謝謝。

歡迎關注我的公眾號:Jianpan

更多好文,敬請期待!

推薦閱讀:

數據、資料庫、數據倉庫
定位未來的自己—數據分析學習計劃
信數據,得永生(一:數據主義簡介)
大數據的價值,在「用」不在「大」
未來營銷的闖關高配:大數據+虛擬現實+人工智慧

TAG:Hadoop | HDFS | 大數據 |