HDFS中NameNode工作機制
1.NameNode的主要功能
(1)負責客戶端請求的響應;
(2)負責元數據的管理。
2.元數據管理
namenode對數據管理采用了三種存儲形式:
(1)內存元數據;
(2)磁盤元數據鏡像文件;
(3)數據操作日志文件(可以通過日志運算出元數據)。
2.1元數據的存儲機制
(1)內存中有一份完整的元數據(meta data);
(2)磁盤中有一個元數據鏡像文件(fsimage),fsimage是HDFS文件系統存於硬盤中的元數據檢查點,里面記錄了自最后一次檢查點之前HDFS文件系統中所有目錄和文件的序列化信息;
(3)用於銜接內存meta data和持久化元數據鏡像fsimage之間的操作日志(edits文件);edits保存了自最后一次檢查點之后所有針對HDFS文件系統的操作,比如:增加文件、重命名文件、刪除目錄等等。
這兩種文件存放在${dfs.namenode.name.dir}/current/目錄下,文件名以edits_和fsimage_命名,該目錄為NameNode上的本地目錄。為了保證這兩種元數據文件的高可用性,一般的做法,將dfs.namenode.name.dir設置成以逗號分隔的多個目錄,這多個目錄至少不要在一塊磁盤上,最好放在不同的機器上。
2.2手動查看元數據
由於這fsimage和edits是經過序列化的,非文本的,因此無法直接查看,Hadoop2.X中,hdfs提供了查看這兩種文件的工具。
(1)命令hdfs oiv用於將fsimage文件轉換成其他格式的,如文本文件、XML文件。
該命令需要以下參數:
必須參數:-i 輸入fsimage文件,-o 輸出文件路徑,如果該路徑已存在,則覆蓋.
可選參數:-p 將fsimage轉換成哪種格式,有Ls/XML/FileDistribution,默認為Ls。
-h 顯示幫助信息。
(2)命令hdfs oev用於查看edits文件
該命令需要以下參數:
必須參數:-i 輸入edits文件,如果是xml后綴,表示XML格式,其他表示二進制。
可選參數:-p 將edits轉換成哪種格式,有Ls/XML/FileDistribution,默認為Ls。
-h 顯示幫助信息。
-f 重置輸入edits文件中的transaction IDs。
-r 使用recovery模式,跳過edits中的錯誤記錄。
-v 打印處理時的輸出。
2.3 元數據的checkpoint
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地,並加載到內存進行merge,這個過程稱為checkpoint。
checkpoint操作的觸發條件配置參數,在hdfs-site.xml文件配置
dfs.namenode.checkpoint.check.period=60 #檢查觸發條件是否滿足的頻率,60秒 dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary // 配置從Active namenode 下載的鏡像文件臨時存放的節點。 dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir} // 配置從Active namenode 下載的編輯日志臨時存放的節點。 dfs.namenode.checkpoint.max-retries=3 #最大重試次數 dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時間間隔3600秒 dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操作記錄
checkpoint的作用
namenode和secondary namenode或者 standby namenode的工作目錄存儲結構完全相同,所以,當namenode故障退出需要重新恢復時,可以從 secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復namenode的元數據。
參考文章
