1. NN 和 2NN 工作機制
- NameNode 會產生在磁盤中備份元數據的FsImage;
- 每當元數據有更新或者添加數據時,修改內存中的元數據並追加到Edits中;
- SecondaryNameNode 專門用於合並 FsImage 和 Edits;
2. Fsimage 和 Edits 解析
- 查看Fsimage:
hdfs oiv -p XML -i fsimage_0000000000000000105 -o fsimage.xml
hdfs oiv -p 需要轉換生成的文件類型 -i 鏡像文件 -o 轉換后文件輸出路徑
- 查看Edits:
hdfs oev -p XML -i edits_000000000000000104-000000000000000105 -o edits.xml
3. CheckPoint 時間設置
- 通常情況下, SecondaryNameNode 每隔一小時執行一次;
- 另一種情況:一分鍾檢查一次操作次數,當操作次數達到一百萬時, SecondaryNameNode 執行一次;
// hdfs-default.xml
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</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>一分鍾檢查一次操作次數</description>
</property>
4. NameNode 故障處理
- NameNode 發生故障后,可以采用兩種方法恢復數據
- 將 SecondaryNameNode 中數據拷貝到 NameNode 存儲數據的目錄;
- 使用
-importCheckpoint
選項啟動 NameNode 守護進程, 從而將 SecondaryNameNode 中數據拷貝到 NameNode 目錄中;- 如果 SecondaryNameNode 和 NameNode 不在一個主機節點上,需要將 SecondaryNameNode 存儲數據的目錄拷貝到 NameNode 存儲數據的評級目錄,並刪除
in_user.lock
文件; bin/hdfs namenode -importCheckpoint
- 啟動 NameNode:
sbin/hadoop-daemon.sh start namenode
- 如果 SecondaryNameNode 和 NameNode 不在一個主機節點上,需要將 SecondaryNameNode 存儲數據的目錄拷貝到 NameNode 存儲數據的評級目錄,並刪除
// 第二種方式,需要修改 hdfs-site.xml 配置文件
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>NameNode中存放地址/tmp/dfs/name</value>
</property>
5. 集群的安全模式
5.1 NameNode 啟動
- NameNode 啟動時, 首先將鏡像文件(Fsimage)載入內存,並執行編輯日志(Edits)中的各項操作。一旦在內存中成功建立文件系統元數據的映像,則創建一個新的 Fsimage 文件和一個空的編輯日志。此時,NameNode 開始監聽 DataNode 請求。這個過程期間,NameNode 一直運行在安全模式,即 NameNode 的文件系統對於客戶端來說是只讀的。
5.2 DataNode 啟動
- 系統中的數據塊的位置並不是有 NameNode 維護的, 而是以塊列表的形式存儲在 DataNode 中。在系統的正常操作期間, NameNode 會在內存中保留所有塊位置的映射信息。在安全模式下, 各個 DataNode 會向 NameNode 發送最新的塊列表信息, NameNode 了解到足夠多的塊位置信息之后, 即可高效運行文件系統。
5.3 安全模式退出判斷
- 如果滿足"最小副本條件", NameNode 會在30秒鍾之后就退出安全模式。所謂的最小副本條件指的是在整個文件系統中99.9%的塊滿足最小副本級別(默認值:
dfs.replication.min=1
)。在啟動一個剛剛格式化的 HDFS 集群時,因為系統中還沒有任何塊,所以 NameNode 不會進入安全模式。
5.4 安全模式基本語法
- 查看安全模式狀態:
hdfs dfsadmin -safemode get
- 進入安全模式狀態:
hdfs dfsadmin -safemode enter
- 離開安全模式狀態:
hdfs dfsadmin -safemode leave
- 等待安全模式離開:
hdfs dfsadmin -safemode wait
6. NameNode多目錄
- NameNode 在本地目錄可以配置成多個, 且每個目錄存放內容相同,增加了可靠性;
// hdfs-site.xml 配置
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1, file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>
參考資料: