hadoop的hdfs讀寫文件流程

在這裏插入圖片描述一 讀取文件流程

  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()

在這裏插入圖片描述二 寫入文件流程
1.發送創建文件請求:調用分佈式文件系統DistributedFileSystem.create()方法

2.Namenode中創建文件記錄:分佈式系統DistributedFileSystem發送RPC請求給namenode,namenode檢察權限後創建一條記錄,返回輸出流FSDataOutputStream,封裝了輸出流DFSOutputStream

3.客戶端寫入:輸出流DFSOutputStream將數據分成一個個的數據包,並寫入內部隊列,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發現副本兩不足時,會在另一個節點創建新的副本.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章