一、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文件來記錄檢查點執行的時間