NameNode和SecondaryNameNode的工作機制


NameNode&Secondary NameNode 工作機制

工作機制gif圖

NameNode:
	1.啟動時,加載編輯日志和鏡像文件到內存
	2.當客戶端對元數據進行增刪改,請求NameNode
	3.NameNode記錄操作日志,更新滾動日志
	4.日志記錄完成,在NameNode內存中對元數據進行操作
	edits.001 操作日志
	edits.002
	edits.inprogress 正在進行的操作日志
	fsimage	鏡像文件
SecondaryNameNode:(其主要作用就是:合並edit和fsimage)
	0.檢查點(checkpoint)觸發。條件是:
		a.定時時間到(默認一個小時)
		b.操作日志中的數據滿了(100w次操作)
	1.請求NameNode是否需要CheckPoint,直接帶回 NameNode是否檢查結果
	2.執行CheckPoint請求
	3.滾動正在寫的操作日志,生成最新的一個操作日志
	4.將操作日志和之前舊的鏡像fsimage文件拷貝到SecondaryNameNode
	5.在SecondaryNameNode內存中合並日志文件和fsimage文件
	6.生成新的fsimage.chkpoint
	7.將fsimage.chkpoint拷貝到NameNode中
	8.重命名fsimage.chkpoint為fsimage

日志文件

目錄結構:

$HADOOP_HOME/data/tmp/dfs/name/current
$HADOOP_DATA_HOME/tmp/dfs/name/current


edits_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION


1.fsimage:
	HDFS 文件系統元數據的一個永久性的檢查點,其中包含 HDFS文件系統的所有目錄和文件 idnode 的序列化信息
2.edits:
	存放 HDFS 文件系統的所有更新操作的路徑,文件系統客戶端執行的所有寫操作首先會被記錄到 edits 文件中。
3.seen_txid:
	文件保存的是一個數字,就是最后一個 edits_的數字

	每次 Namenode 啟動的時候都會將 fsimage 文件讀入內存,
	並從 00001 開始到 seen_txid 中記錄的數字依次執行每個 edits 里面的更新操作,
	保證內存中的元數據信息是最新的、同步的,可以看成 Namenode 啟動的時候就將 fsimage 和 edits 文件進行了合並。

查看fsimage文件和edits文件

oiv 查看 fsimage 文件
	hdfs oiv -p 文件類型 -i 鏡像文件 -o 轉換后文件輸出路徑
	hdfs oiv -p XML -i fsimage_0000000000000000025 -o  /opt/module/hadoop-2.7.2/fsimage.xml

oev 查看 edits 文件
	hdfs oev -p 文件類型 -i 編輯日志 -o 轉換后文件輸出路徑
	hdfs  oev  -p  XML  -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml

chkpoint 檢查 時間 參數 設置

hdfs-default.xml

<!-- 默認:SecondaryNameNode 每隔一小時執行一次 -->
	<property>
		<name>dfs.namenode.checkpoint.period</name>
		<value>3600</value>
	</property>

<!-- 一分鍾檢查一次操作次數,當操作次數達到 1 百萬時,SecondaryNameNode 執行一次。 -->	
	<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 的本地目錄可以配置成多個,且每個目錄存放內容相同,增加了可靠性。
配置步驟:

(1)在 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>

(2)停止集群,刪除 data 和 logs 中所有數據
	$ rm -rf data/ logs/
(3)格式化集群並啟動。
	$ bin/hdfs namenode –format
	$ sbin/start-dfs.sh

本博客僅為博主學習總結,感謝各大網絡平台的資料。蟹蟹!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM