預(yù)知
HDFS是被Hadoop應(yīng)用使用的一個主要的分布式存儲文件系統(tǒng)。一個HDFS集群主要由一個NameNode(管理文件系統(tǒng)元數(shù)據(jù))和多個DataNode(存儲實際的數(shù)據(jù))集成肛捍。HDFS的架構(gòu)請參考我的另一篇文章。
HDFS啟動過程
NameNode會保存它的命名空間狀態(tài)信息到本地文件系統(tǒng)愧怜。
- fsimage:保存最后一次執(zhí)行checkpoint時的命名空間狀態(tài)信息;
- etids:日志文件看蚜。保存最后一次checkpoint之后的命名空間信息修改變化的日志記錄叫搁。
- 當(dāng)啟動HDFS的時候,會先啟動NameNode節(jié)點供炎;NameNode從鏡像文件(fsimage文件)讀取HDFS狀態(tài)信息;
- 接著從日志記錄文件(editswenjian )加載狀態(tài)更新信息;
- 然后NameNode節(jié)點將HDFS的最新狀態(tài)寫入到fsimage文件(也就是將faimage文件和edits文件合并);
- 再重新創(chuàng)建一個新的空的日志文件來記錄文件修改等日志記錄疾党。
其中音诫,fsimage文件和edit日志記錄文件的位置可以在配置文件hdfs-core.xml中通過dfs.namenode.name.dir參數(shù)來指定。
由于NameNode只在啟動的時候合并fsimage和edits文件雪位,所以當(dāng)一個大的集群運行很久之后竭钝,edits日志文件就會變得很大,這就會影響在NameNode啟動時日志文件的讀取速度雹洗,從而延長了HDFS的啟動時間香罐。這就引出了Secondary NameNode。
特性
Secondary NameNode(在1.0.4版本之后时肿,可由Checkpoint Node替代)
Secondary NameNode會定期的合并fsimage和edits文件庇茫,并限制edits日志文件的大小在一定的范圍之內(nèi)。Secondary NameNode通常運行在和NameNode不同的機(jī)器上螃成。
Secondary NameNode執(zhí)行這些操作主要由這兩個參數(shù)來控制:
- dfs.namenode.checkpoint.period: 兩次連續(xù)操作之間的時間間隔旦签,默認(rèn)1個小時;
- dfs.namenode.checkpoint.txns: 定義發(fā)生在NameNode上的最新事物數(shù)寸宏,默認(rèn)一百萬個宁炫,優(yōu)先級大于第一個。
Checkpoint Node
Checkpoint Node定期創(chuàng)建命名空間的checkpoint氮凝。從NameNode下載fsimage和edits文件到本地進(jìn)行合并羔巢,并上傳行的鏡像文件給NameNode。Checkpoint Node一般也是運行于一臺不同的機(jī)器上面,可由命令bin/hdfs namenode -checkpoint啟動竿秆。Checkpoint node跟Secondary node一樣由相同的參數(shù)配置控制炭臭。
Backup Node
Backup Node除了提供跟Checkpoint Node一樣的功能外,它會在內(nèi)存中運行一個最新的跟NameNode狀態(tài)同步的內(nèi)存副本袍辞。Backup Node不需要從NameNode下載fsimage和edits日志文件來創(chuàng)建checkpoint(在CheckpointNode和SecondaryNode中可能需要)鞋仍;因為BackupNode總是有一個同NameNode一樣的內(nèi)存副本。NameNode在同一時間只支持一個BackupNode節(jié)點搅吁;如果有一個BackupNode被使用威创,那么CheckpointNode是不能夠存在的。BackupNode的配置同CheckpointNode一樣谎懦,他又bin/hdfs namenode -backup命令啟動肚豺。
機(jī)架感知
典型的,一個大的Hadoop集群會被放在一個機(jī)群中界拦,在這樣的機(jī)群中吸申,比起跨機(jī)架來說,在相同的機(jī)架上網(wǎng)絡(luò)流量會更好享甸。同時截碴,NameNode也會放置不同的塊副本到不同的機(jī)架上來增強(qiáng)集群的容錯性能。集群管理員可以通過配置變量net.topology.script.file.name來決定節(jié)點所屬機(jī)架的策略蛉威。當(dāng)這個腳本被配置后日丹,每個節(jié)點都會運行這個腳本來決定自己所處的機(jī)架id。默認(rèn)所有的節(jié)點都屬于同一個機(jī)架蚯嫌。
安全模式
NameNode啟動過程中哲虾,加載fsimage和edits文件,然后等待DataNode啟動并且向NameNode報告他們的狀態(tài)择示;這個時間段之間束凑,NameNode就是出于安全模式。NameNode的安全模式實際就是HDFS處于只讀模式栅盲,在這個模式下所有的對文件系統(tǒng)的修改操作都不允許汪诉。在DataNode已經(jīng)報告他們的文件塊可用之后,NameNode會自動從安全模式下解除剪菱。如果有需要摩瞎,HDFS可以通過bin/hdfs dfsadmin -safemode命令來設(shè)置為安全模式狀態(tài)。