一、HDFS的讀寫程序
1. 寫流程
<1>HDFS獲取客戶端;
<2>向NameNode請求上傳檔案;
<3>NameNode檢查目錄樹是否可以創建檔案;
檢查權限
檢查目錄結構,目錄是否存在
<4>NameNode 回應可以上傳檔案;
<5>HDFS客戶端 請求上傳第一個Block(0-128M),請求回傳DataNode;
<6>NameNode回傳三個DataNode節點,表示采用這三個節點存盤資料;
<7> HDFS客戶端請求建立Block傳輸通道,進行寫資料;
<8>DataNode應答成功;
<9>傳輸,最小單位Packet,64K

2. 網路拓撲-節點距離計算
<1>在HDFS寫入資料的時候,NameNode會選擇距離待上傳資料最近距離的DataNode接受資料
<2>節點距離:兩個節點到達最近的共同祖先的距離總和

3.機架感知
副本存盤節點選擇
<1>第一個副本在Client所在節點上,如果客戶端在集群外,隨機選一個
<2>第二個副本在另一個機架的隨機一個節點
<3>第三個副本在第二個副本所在機架的隨機節點

4. 讀資料
<1> HDFS獲取客戶端;
<2> HDFS客戶端 請求下載檔案;
<3> NameNode 檢查資料;
<4> NameNode 回傳目標檔案的元資料;
<5> HDFS客戶端 創建讀取資料流;
<6> HDFS客戶端 讀取資料;
<7>DataNode 回傳資料

二、NameNode和SecondaryNameNode
1. 概念
<1>Fsimage檔案
HDFS檔案系統元資料的一個永久性的檢查點,其中包含HDFS檔案系統的所有目錄和檔案inode的序列化資訊,
<2>Edits檔案
存放HDFS檔案系統的所有更新操作的路徑,檔案系統客戶端執行的所有寫操作首先會被記錄到Edits檔案中
<3>seen_txid檔案
保存的是一個數字,就是最后一個edits的數字
<4>nameNode啟動程序
每次NameNode啟動的時候都會將Fsimage檔案讀入記憶體,加載Edits里面的更新操作,保證記憶體中的元資料資訊是最新的,同步的,可以看成NameNode啟動的時候就將Fsimage和Edits檔案進行了合并,
2. NN和2NN作業機制
第一階段:NameNode啟動
<1>第一次啟動NameNode格式化后,創建Fsimage和Edits檔案,如果不是第一次啟動,直接加載Fsimage和Edits檔案到記憶體,
<2>客戶端對元資料進行增刪改的操作
<3>NameNode記錄操作日志,更新滾動日志
<4>NameNode在記憶體中對元資料進行增刪改,
第二階段:SecondaryNameNode作業
<1>SecondaryNameNode 詢問NameNode 是否需要CheckPoint,直接帶回NameNode是否檢查結果
<2> SecondaryNameNode請求執行CheckPoint
<3> NameNode滾動正在寫的Edits日志
<4>將滾動前的Fsimage和Edits檔案拷貝到SecondaryNameNode
<5> SecondaryNameNode 加載Fsimage和Edits檔案到記憶體,并合并
<6>生成新的鏡像檔案fsimage.chkpoint
<7>拷貝fsimage.chkpoint到NameNode
<8>NameNOde將fsimage.chkpoint重命名為fsimage

3.Fsimage 和Edits查看
<1>oiv
查看Fsimage檔案
Hadoop oiv -p 檔案型別 -i 鏡像檔案 -o 轉換之后檔案輸出的路徑
<2> oev
查看Edits檔案
Hadoop oev -p 檔案型別 -i 編輯日志檔案 -o 轉換之后檔案輸出的路徑
4. CheckPoint時間配置
hdfs-default.xml檔案下
<1>通常情況下 SecondaryNameNode每隔一小時執行一次

<2>一分鐘檢查一次運算元,當操作次數達到一百萬時,SecondaryNameNode執行一次


三、DataNode作業機制(了解)
1.DateNode簡介
一個資料塊在DataNode上以檔案的形式存盤在磁盤上,包括兩個檔案,一個資料本身,一個是元資料包括資料開的長度,塊資料的校驗和以及時間戳
DataNode啟動后向NameNode注冊,通過后,周期性的向NameNode上報所有的塊資訊
2. 作業機制
<1>DataNode啟動后向NameNode注冊
<2>NameNode回傳注冊成功
<3>DataNode以后周期(6小時)上報所有塊資訊
<4>心跳每三秒一次,心跳回傳結果帶有NameNode給該DateNode的命令
<5>超過10分鐘+20秒沒有收到DataNode的心跳,則認為該DataNode節點不可用

3. 時間配置
hdfs-default.xml檔案下
<1> DataNode 向NameNode匯報當前解讀資訊的時間間隔,默認6小時

<2> DataNode掃描自己節點塊資訊串列的時間,默認6小時

4. 資料完整性
<1>DataNode節點保證資料完整性的方法
- 當DateNode讀取Block的時候,它會計算CheckSum
- 如果計算后的CheckSum,與Block創建時值不一樣,說明Blick已經損壞
- Client讀取其他DataNode上的Block
- 常見的校驗演算法crc(32)、md5、shal(160)
- DataNode在其檔案創建后周期驗證CHeckSum
5. 掉線實作引數設定
<1>兩個配置引數
hdfs-default.xml檔案下
需要注意的是hdfs-site.xml 組態檔中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒,


<2>解釋圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416183.html
標籤:其他
