本文原始碼:GitHub·點這裡 || GitEE·點這裡
一、儲存機制
1、基礎描述
NameNode執行時後設資料需要存放在記憶體中,同時在磁碟中備份後設資料的fsImage,當後設資料有更新或者新增後設資料時,修改記憶體中的後設資料會把操作記錄追加到edits日誌檔案中,這裡不包括查詢操作。如果NameNode節點發生故障,可以通過FsImage和Edits的合併,重新把後設資料載入到記憶體中,此時SecondaryNameNode專門用於fsImage和edits的合併。
2、工作流程
NameNode機制
- NameNode格式化啟動之後,首次會建立Fsimage和Edits檔案;
- 非首次啟動直接載入FsImage映象檔案和Edits日誌到記憶體中;
- 客戶端對後設資料執行增刪改操作會記錄到Edits檔案;
- 然後請求的相關操作會修改記憶體中的後設資料;
SecondaryNameNode機制
- 詢問NameNode是否需要CheckPoint,NameNode返回資訊;
- 如果需要SecondaryNameNode請求執行CheckPoint;
- NameNode切割現有日誌檔案,新記錄滾動寫入新Edits檔案;
- 滾動前的編輯日誌和映象檔案拷貝到SecondaryNameNode;
- SecondaryNameNode載入Edits日誌和FsImage映象檔案到記憶體合併;
- 生成新的映象檔案fsimage.chkpoint後拷貝到NameNode;
- NameNode將fsimage.chkpoint重新命名成fsimage;
3、CheckPoint設定
通過修改hdfs-default.xml檔案的相關配置,設定一些SecondaryNameNode的機制,例如每隔一小時執行一次。
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>檔案滿1000000記錄數</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分鐘檢查一次檔案記錄數</description>
</property >
二、檔案資訊
1、FsImage檔案
NameNode記憶體中後設資料序列化備份資訊;
生成路徑:基於NameNode節點
cd /opt/hadoop2.7/data/tmp/dfs/name/current/
檢視檔案
# 基本語法
hdfs oiv -p 轉換檔案型別 -i 映象檔案 -o 轉換後檔案輸出路徑
基於語法格式,操作上圖中的檔案:
# 轉換檔案
hdfs oiv -p XML -i fsimage_0000000000000000019 -o /data/fsimage.xml
# 檢視
cat /data/fsimage.xml
這樣就可以看到一些後設資料的資訊。
2、Edits檔案
存放HDFS檔案的所有增刪改操作的路徑,會記錄在Edits檔案中。
基本語法
hdfs oev -p 轉換檔案型別 -i 日誌檔案 -o 轉換後檔案輸出路徑
檢視檔案
# 轉換檔案
hdfs oev -p XML -i edits_0000000000000000020-0000000000000000020 -o /data/edits.xml
# 檢視
cat /data/edits.xml
三、故障恢復
1、拷貝SecondaryNameNode資料
首先結束NameNode程式;
刪除NameNode儲存的資料;
[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*
拷貝SecondaryNameNode中資料到NameNode資料儲存目錄下;
# 注意SecondaryNameNode服務配置在hop03上
[root@hop01 /] scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary/* /opt/hadoop2.7/data/tmp/dfs/name/
重新啟動NameNode程式;
2、基於Checkpoint機制
修改hdfs-site.xml配置,同步到叢集相關服務下,重啟HDFS程式;
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop2.7/data/tmp/dfs/name</value>
</property>
結束NameNode程式;
刪除NameNode儲存的資料;
[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*
由於叢集中SecondaryNameNode(在hop03)不和NameNode(在hop01)在一個主機節點上,需要將SecondaryNameNode儲存資料的目錄拷貝到NameNode儲存資料的平級目錄,並刪除in_use.lock檔案;
[root@hop01 /]scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary /opt/hadoop2.7/data/tmp/dfs/
[root@hop01 namesecondary/] rm -rf in_use.lock
[root@hop01 dfs]$ ls
data name namesecondary
匯入檢查點資料
[root@hop01 hadoop2.7] bin/hdfs namenode -importCheckpoint
重新啟動NameNode
[root@hop01 hadoop2.7] sbin/hadoop-daemon.sh start namenode
四、多個目錄配置
NameNode可以配置多本地目錄,每個目錄存放內容相同,增加執行的可靠性;
1、新增配置
# vim /opt/hadoop2.7/etc/hadoop/hdfs-site.xml
# 新增內容如下
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name01,file:///${hadoop.tmp.dir}/dfs/name02</value>
</property>
該配置需要同步叢集下所有服務;
2、刪除原有資料
叢集下所有服務都需要執行該操作;
[root@hop01 hadoop2.7]# rm -rf data/ logs/
格式化NameNode之後重啟叢集服務。
五、安全模式
1、基本描述
NameNode剛啟動時,會基於映象檔案和編輯日誌在記憶體中載入檔案系統後設資料的映像,然後開始監聽DataNode請求,該過程期間處於一個只讀的安全模式下,客戶端無法上傳檔案,在該安全模式下DataNode會傳送最新的資料塊列表資訊到NameNode,如果滿足最小副本條件,NameNode在指定時間後就會退出安全模式。
2、安全模式
- 安全模式狀態
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode get
- 進入安全模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode enter
- 退出安全模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode leave
- 等待安全模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode wait
六、原始碼地址
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent
推薦閱讀:程式設計體系整理
序號 | 專案名稱 | GitHub地址 | GitEE地址 | 推薦指數 |
---|---|---|---|---|
01 | Java描述設計模式,演算法,資料結構 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆☆ |
02 | Java基礎、併發、物件導向、Web開發 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆ |
03 | SpringCloud微服務基礎元件案例詳解 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆ |
04 | SpringCloud微服務架構實戰綜合案例 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆☆ |
05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆ |
06 | SpringBoot框架整合開發常用中介軟體 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆☆ |
07 | 資料管理、分散式、架構設計基礎案例 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆☆ |
08 | 大資料系列、儲存、元件、計算等框架 | GitHub·點這裡 | GitEE·點這裡 | ☆☆☆☆☆ |