HDFS客戶端讀寫流程圖


一、HDFS客戶端寫流程

 1.客戶端請求上傳數據到服務器

 2.服務器接收到這個請求,然后到自己的元數據里面去查詢,元數據中是否記錄了該文件的存在

 3.NN響應客戶端是否可以上傳

 4.服務器會發送再次請求,需要上傳多大的數據文件

 5.服務器會根據上傳文件大小進行調度,返回要上傳的DataNode節點

 6.客戶端接收隊列數據:

  通過pop方法,取出第一個節點的地址,然后訪問該節點,並吧剩下的其他節點的IP地址帶過去;

  第一個DN接收數據,再從隊列中取出第一個,繼續把剩下的IP帶過去,直到最后一個節點結束;

  最后一個節點收到信息之后,想源地址發送確認消息,確認到第一個DN的時候,DN會把確認消息返回給客戶端;

 7.datanode反順序依次應答,直到應答給客戶端

 8.客戶端向datanode上傳文件塊

 9.上傳文件塊后,各datanode會通過心跳將位置信息匯報給namenode

 注:如果上傳文件塊時,某個datanode節點掛掉了,該節點的上節點直接連接該節點的下游節點繼續傳輸,最終在第7步匯報后,namenode會發現副本數不足,觸發datanode復制更多副本

10.客戶端重復上傳操作,逐一將文件塊上傳,同時dataNode匯報塊的位置信息,時間線重疊

11.所有塊上傳完畢后,namenode將所有信息存在元數據中,客戶端關閉輸出流

二、HDFS客戶端讀流程

 

 

1.用戶操作客戶端查看文件,客戶端帶着文件名向namenode發起下載請求

2.namenode在元數據中查找該文件對應各個塊的大小位置信息,返回給客戶端

3.namenode向位置datanode節點發起下載請求

4.datanode向客戶端傳輸塊數據

5.客戶端下載完成所有塊后會驗證datanode中的MD5,保證塊數據的完整性,最后關閉輸入流

三、元數據,Checkpoint

 

 3.1 元數據

 1.元數據:元數據是我們內存的一塊空間

 2.元數據:是一個文件,fsimage_0000000000XX文件就是元數據

 3.元數據:就是一個小型的數據庫,里面存放了所有文件的位置

3.2  Secondarynamenode

 1.secondarynamenode實際上是對NameNode數據的一個備份

 2.secondarynamenode是為了防止NameNode機器掛掉

 3.secondarynamenode不能和NameNode放在一起

 可以修改hdfs-site.xml配置文件來指定secondarynamenode的地址

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadp02:50090</value>
</property>

3.3  Checkpoint

1.輔助Namenode請求主Namenode停止使用edits文件,暫時將新的寫操作記錄到一個新文件中,如edits.new。

2.輔助Namenode節點從主Namenode節點獲取fsimage和edits文件(采用HTTP GET)

3.輔助Namenode將fsimage文件載入到內存,逐一執行edits文件中的操作,創建新的fsimage文件

4.輔助Namenode將新的fsimage文件發送回主Namenode(使用HTTP POST)

5.主Namenode節點將從輔助Namenode節點接收的fsimage文件替換舊的fsimage文件,用步驟1產生的edits.new文件替換舊的edits文件(即改名)。同時更新fstime文件來記錄檢查點執行的時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM