元數據生成與備份
- 集羣啓動 nameNode 節點下會生成 edit 操作日誌和 fsImage 元數據文件鏡像 兩類數據磁盤備份, 並加載到內存中
- 客戶端向 nameNode 請求對數據操作(增刪改)
- nameNode 想 edit 操作日誌文件追加操作記錄(增刪改)
- 文件數據追加結束後, 將 nameNode 元數據進行修改
- secondary NameNode 會定期檢查 nameNode 中的 fsImage 和 edit 操作日誌是否由於長時間追加操作導致數據量過大, 效率降低, (默認 edit 操作日誌到達 100 萬條, 請求 checkPoint 操作)
- 開始請求 checkPoint, 對元數據備份進行整理
- nameNode 將 增加edit 操作日誌, 後續操作追加到新的 edit 操作中, 防止數據整理, 不能對數據寫的問題
- nameNode 將 edit 操作日誌和 fsImage 文件發送到 secondary NameNode
- secondary NameNode 將 edit 操作日誌和 fsImage 加載到內存合併
- secondary NameNode 將內存中的數據寫入到 fsImage.checkPoint文件中
- secondary NameNode 將 fsImage.checkPoint 發送到 NameNode 中
- NameNode 將 fsImage.checkPoint 重命名 fsImage 替換原來的 fsImage 文件
磁盤備份文件
-
nameNode 節點元數據磁盤備份位置
-
edits_000000000000001-00000000000000009 操作記錄, 每次的操作
-
edits_inprogress_00000000000000000095 累計的操作記錄
轉成 xml 查看操作 edits_0000000000000000010-000000000000000055 記錄了 55-10 次操作
hdfs oev -p XML -i edits_0000000000000000010-000000000000000055 -o 55.xml
第 11 次操作 創建一個新的文件夾 路徑/user 空間 15853658… 用戶 hadoop 用戶組 supergroup
-
fsImage_00000000000000094 元數據鏡像
hdfs oiv -p XML -i fsImage_00000000000000092 -o fs.xml
-
seen_txid 記錄 操作次數 位置
checkPoint 檢查配置
<!-- hdfs-default.xml -->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>設置 secondary NameNode 間隔時長 1h 執行 checkPoint 操作</description>
</property>
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作動作次數</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分鐘檢查一次操作次數</description>
</property >
nameNode 故障處理
當 nameNode 中的數據丟失或其它原因數據不全時, 可以通過 secondary NameNode 對 NameNode 數據恢復
直接拷貝
-
停止 nameNode 節點
kill -9 nameNodeId
-
刪除 nameNode 中name 數據
rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
-
拷貝 secondary NameNode 數據到 nameNode 下
scp -r hadoop@hadoop164:/opt/modules/hadoop/data/tmp/dfs/namesecondary/* /opt/modules/hadoop/data/tmp/dfs/name/
-
啓動 nameNode 節點
hadoop-daemon.sh start namenode
-
啓動時,刷新網頁頁面提示安全模式
importCheckPoint 恢復
-
修改hdfs-site.xml中的配置
<!--減小檢查時間--> <property> <name>dfs.namenode.checkpoint.period</name> <value>120</value> </property> <!--指定 nameNode 的 name 數據目錄--> <property> <name>dfs.namenode.name.dir</name> <value>/opt/module/hadoop/data/tmp/dfs/name</value> </property>
-
停止 nameNode 節點
kill -9 nameNodeId
-
刪除 nameNode 中name 數據
rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
-
secondNameNode 與 nameNode 不在同一節點時, 將 secondaryNameNode中的數據拷貝到 nameNode 下
scp -r hadoop@hadoop164:/opt/module/hadoop/data/tmp/dfs/namesecondary /opt/module/hadoop/data/tmp/dfs/namesecondary
-
刪除 in_use.lock
cd namesecondary/ rm -f in_use.lock
-
導入檢查點數據(過一會 ctrl+c)
hdfs namenode -importCheckpoint
-
啓動 nameNode 節點
hadoop-daemon.sh start namenode
-
啓動時,刷新網頁頁面提示安全模式
安全模式
-
NameNode 啓動
NameNode 啓動時, 首先將鏡像文件(FsImage) 載入內存, 並執行編輯日誌(Edits) 中的各項操作, 一旦在內存中成功建立文件系統元數據的映像, 則創建一個新的 FsImage 文件和一個空的編輯日誌. 此時, NameNode 開始監聽 DataNode 請求. 這個過程期間, NameNode 一直運行在安全模式,即 NameNode 的文件系統對客戶端來說是隻讀的.
-
DataNode 啓動
系統中的數據塊的位置並不是由 NameNode 維護的, 而是以塊列表的形式存儲在 DataNode 中, 在系統的正常操作期間, NameNode 會在內存中保留所有塊位置的映射信息. 在安全模式下, 各個 DataNode 會向 NameNode 發送最新的塊列表信息, NameNode 瞭解到足夠多的塊位置信息後, 即可高效運行文件系統.
-
安全模式退出判斷
如果滿足"最小副本條件", NameNode 會在 30 秒後退出安全模式. 最小副本條件指的是在整個文件系統中 99.9%的塊滿足最小副本級別(默認值:dfs.replication.min=1). 在啓動一個剛剛格式化的 HDFS 集羣時, 因爲系統中沒有任何塊, 所有不會進入安全模式
-
命令操作
hdfs dfsadmin -safemode get (功能描述:查看安全模式狀態) hdfs dfsadmin -safemode enter (功能描述:進入安全模式狀態, 此時不允許操作數據) hdfs dfsadmin -safemode leave (功能描述:離開安全模式狀態) hdfs dfsadmin -safemode wait (功能描述:等待安全模式狀態, 等待安全模式退出後執行後續操作)