Hadoop中Namenode单点故障的解决方案及详细介绍
生活随笔
收集整理的這篇文章主要介紹了
Hadoop中Namenode单点故障的解决方案及详细介绍
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正如大家所知,NameNode在Hadoop系統(tǒng)中存在單點(diǎn)故障問題,這個(gè)對(duì)于標(biāo)榜高可用性的Hadoop來說一直是個(gè)軟肋。本文討論一下為了解決這個(gè)問題而存在的幾個(gè)solution。
1. Secondary NameNode
原理:Secondary NN會(huì)定期的從NN中讀取editlog,與自己存儲(chǔ)的Image進(jìn)行合并形成新的metadata image
優(yōu)點(diǎn):Hadoop較早的版本都自帶,配置簡單,基本不需要額外資源(可以與datanode共享機(jī)器)
缺點(diǎn):恢復(fù)時(shí)間慢,會(huì)有部分?jǐn)?shù)據(jù)丟失
2. Backup NameNode
原理:backup NN實(shí)時(shí)得到editlog,當(dāng)NN宕掉后,手動(dòng)切換到Backup NN;
優(yōu)點(diǎn):從hadoop0.21開始提供這種方案,不會(huì)有數(shù)據(jù)的丟失
缺點(diǎn):因?yàn)樾枰獜腄ataNode中得到Block的location信息,在切換到Backup NN的時(shí)候比較慢(依賴于數(shù)據(jù)量)
3. Avatar NameNode
原理:這是Facebook提供的一種HA方案,將client訪問hadoop的editlog放在NFS中,Standby NN能夠?qū)崟r(shí)拿到editlog;DataNode需要同時(shí)與Active NN和Standby NN report block信息;
優(yōu)點(diǎn):信息不會(huì)丟失,恢復(fù)快(秒級(jí)) 缺點(diǎn):Facebook基于Hadoop0.2開發(fā)的,部署起來稍微麻煩;需要額外的機(jī)器資源,NFS成為又一個(gè)單點(diǎn)(不過故障率低) 4. Hadoop2.0直接支持StandBy NN,借鑒Facebook的Avatar,然后做了點(diǎn)改進(jìn)
優(yōu)點(diǎn):信息不會(huì)丟失,恢復(fù)快(秒級(jí)),部署簡單
詳細(xì)介紹Hadoop NameNode單點(diǎn)問題解決方案之一 AvatarNode
需求: 實(shí)現(xiàn)namenode元數(shù)據(jù)的備份,解決namenode單點(diǎn)宕機(jī)導(dǎo)致集群不可用的問題。 方案描述: 當(dāng)namenode所在服務(wù)器宕機(jī)的時(shí)候,我們可以利用namenode備份的元數(shù)據(jù)迅速重構(gòu)新的namenode來投入使用。 1.??Hadoop本身提供了可利用secondarynamenode的備份數(shù)據(jù)來恢復(fù)namenode的元數(shù)據(jù)的方案,但因?yàn)閏heckpoint(在每次 checkpoint的時(shí)候secondarynamenode才會(huì)合并并同步namenode的數(shù)據(jù))的問題,secondarynamenode的備份數(shù)據(jù)并不能時(shí)刻保持與namenode同步,也就是說在namenode宕機(jī)的時(shí)候secondarynamenode可能會(huì)丟失一段時(shí)間的數(shù)據(jù),這段 時(shí)間取決于checkpoint的周期。我們可以減小checkpoint的周期來減少數(shù)據(jù)的丟失量,但由于每次checkpoint很耗性能,而且這種方案也不能從根本上解決數(shù)據(jù)丟失的問題。所以如果需求上不允許這種數(shù)據(jù)的丟失,這種方案可直接不予考慮。 2.??Hadoop提供的另一種方案就是NFS,一種即時(shí)備份namenode元數(shù)據(jù)的方案,設(shè)置多個(gè)data目錄(包括NFS目錄),讓namenode在持 久化元數(shù)據(jù)的時(shí)候同時(shí)寫入多個(gè)目錄,這種方案較第一種方案的優(yōu)勢是能避免數(shù)據(jù)的丟失(這里我們暫時(shí)不討論NFS本身會(huì)丟失數(shù)據(jù)的可能性,畢竟這種幾率很小 很小)。既然可以解決數(shù)據(jù)丟失的問題,說明這套方案在原理上是可行的 下載源碼
https://github.com/facebook/hadoop-20
部署環(huán)境
機(jī)器4臺(tái)
hadoop1-192.168.64.41 AvatarNode(primary)
hadoop2-192.168.64.42 AvataDataNode
hadoop3-192.168.64.43 AvataDataNode
hadoop4- 192.168.64.67 AvatarNode(standby)
相關(guān)資源及描述
以下是Avatar方案部署相關(guān)的簡單介紹。
1.首先關(guān)于Avatar方案對(duì)于Hadoop的備份是對(duì)Dfs的的單點(diǎn)備份,并不包括Mapred,因?yàn)镠adoop本身就不存在處理jobtracker單點(diǎn)故障的機(jī)制。
2.AvatarNode繼承自Namenode,而并非對(duì)Namenode的修改,AvatarDataNode同樣亦如此。故Avatar的啟動(dòng)機(jī)制是獨(dú)立于Hadoop本身的啟動(dòng)機(jī)制。
3.在Avatar方案中,SecondaryNamenode的職責(zé)已包括在Standby節(jié)點(diǎn)中,故不需要再獨(dú)立啟動(dòng)一個(gè)SecondaryNamenode。
4.AvatarNode必須有NFS的支持,用以實(shí)現(xiàn)兩個(gè)節(jié)點(diǎn)間事務(wù)日志(editlog)的共享。
5.FB提供的Avatar源碼中暫時(shí)并不能實(shí)現(xiàn)Primary和Standby之間的自動(dòng)切換,可以借助于Zookeeper的lease機(jī)制來實(shí)現(xiàn)自動(dòng)切換。
6.Primary和Standby之間的切換只包括從Standby切換到Primary,并不支持從Primary狀態(tài)切換到Standby狀態(tài)。
7.AvatarDataNode并不使用VIP和AvatarNode通信,而是直接與Primary及Standby通信,故需要使用VIP漂移方案來屏蔽兩個(gè)節(jié)點(diǎn)間切換過程中的IP變換問題。有關(guān)與Zookeeper的整合,官方稱將在之后的版本發(fā)布。
關(guān)于AvatarNode更詳細(xì)的介紹,請(qǐng)參考http://blog.csdn.net/rzhzhz/article/details/7235789,
三、編譯
1.??首先修改hadoop根目錄下build.xml,注釋掉996行和1000行。如下:
<targetname="forrest.check"unless="forrest.home"depends="java5.check"> <!--fail message="'forrest.home' is not defined. Pleasepass-Dforrest.home=<base of Apache Forrest installation> to Antonthe command-line." /--> </target> <target name="java5.check" unless="java5.home"> <!--fail message="'java5.home' is not defined.??Forrest requires Java 5. Please pass -Djava5.home=<base of Java5 distribution> to Ant onthe command-line." /--> </target>
2.? ???在根目錄下輸入ant jar(對(duì)于編譯package可以參考build.xml的代碼)編譯hadoop,編譯后的jar包會(huì)在build目錄下(hadoop-0.20.3-dev-core.jar), 拷貝該jar包到hadoop根目錄下替換到原有的jar (啰嗦一句,hadoop啟動(dòng)時(shí)會(huì)先加載build目錄下的class,所以當(dāng)通過替換class修改jar包時(shí)請(qǐng)先把build目錄暫時(shí)移除掉) 。
3.??進(jìn)入src/contrib/highavailability目錄下編譯Avatar,編譯后的jar包會(huì)在build/contrib/highavailability目錄下(hadoop-${version}-highavailability.jar),拷貝該jar包到lib目錄下。
4.? ???把2,3步中編譯好的jar包分發(fā)到集群中所有機(jī)器的相應(yīng)目錄。
四、配置
1.? ???配置hdfs-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specificproperty overrides in thisfile. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/data/hadoop/hdfs/name</value>
<description>Determineswhereon the local filesystem the DFS name node shouldstore the name table. Ifthis is a??comma-delimited list ofdirectories then the name tableis replicated in all of thedirectories, for redundancy
</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/facebook_hadoop_data/hdfs/data</value>? ?? ?? ???
</property>
<property>
<name>dfs.datanode.address</name>
<value>0.0.0.0:50011</value>
<description>默認(rèn)為50010, 是datanode的監(jiān)聽端口</description>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50076</value>
<description>默認(rèn)為50075,為datanode的http server端口</description>
</property>
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:50021</value>
<description>默認(rèn)為50020, 為datanode的ipc server端口</description>
</property>
<property>
<name>dfs.http.address0</name>
<value>192.168.64.41:50070</value>
</property>
<property>
<name>dfs.http.address1</name>
<value>192.168.64.67:50070 </value>
</property>
<property>
<name>dfs.name.dir.shared0</name>
<value>/data/hadoop/share/shared0</value>
</property>
<property>
<name>dfs.name.dir.shared1</name>
<value>/data/hadoop/share/shared1</value>
</property>
<property>
<name>dfs.name.edits.dir.shared0</name>
<value>/data/hadoop/share/shared0</value>
</property>
<property>
<name>dfs.name.edits.dir.shared1</name>
<value>/data/hadoop/share/shared1</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>
Defaultblock replication. The actual number of replicationscan bespecified when the file is created. The default isused ifreplicationis not specified in create??time
</description>
</property>
</configuration>
參數(shù)說明:
1)??dfs.name.dir.shared0
AvatarNode(Primary)元數(shù)據(jù)存儲(chǔ)目錄,注意不能和dfs.name.dir目錄相同
2)??dfs.name.dir.shared1
AvatarNode(Standby)元數(shù)據(jù)存儲(chǔ)目錄,注意不能和dfs.name.dir目錄相同
3)??dfs.name.edits.dir.shared0
AvatarNode(Primary) edits文件存儲(chǔ)目錄,默認(rèn)與? ?? ?? ?? ???dfs.name.dir.shared0一致
4)??dfs.name.edits.dir.shared1
AvatarNode(Standby) edits文件存儲(chǔ)目錄,默認(rèn)與? ?? ?? ?dfs.name.dir.shared1一致
5)??dfs.http.address0
AvatarNode(Primary) HTTP的監(jiān)控地址
6)??dfs.http.address1
AvatarNode(Standby) HTTP的監(jiān)控地址
7)??dfs.namenode.dn-address0/dfs.namenode.dn-address1
雖然在Avatar源碼中有所涉及,但暫時(shí)并未用到
2.??配置core-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Putsite-specificproperty overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>A baseforother temporary directories.
</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.64.41:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
<property>
<name>fs.default.name0</name>
<value>hdfs://192.168.64.41:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
<property>
<name>fs.default.name1</name>
<value>hdfs://192.168.64.67:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
</configuration>
參數(shù)說明:
1)??fs.default.name
當(dāng)前AvatarNode IP地址和端口號(hào),即Primary和Standby的配置為各自的IP地址和端口號(hào)。
2)??fs.default.name0
AvatarNode(Primary) IP地址和端口號(hào)
3)??fs.default.name1
AvatarNode(Standby)??IP地址和端口號(hào)
3.? ???因?yàn)椴簧婕暗絤apred,故mapred-site.xml不用作修改,為原有集群配置即可。
4.? ???分發(fā)修改后的配置文件到集群節(jié)點(diǎn)并在Primary和Standby節(jié)點(diǎn)上建立好配置文件中相應(yīng)目錄。
5.? ???建立NFS,實(shí)現(xiàn)Primary與Standby shared0目錄的數(shù)據(jù)共享。有關(guān)NFS的配置請(qǐng)參考http://blog.csdn.net/rzhzhz/article/details/7056732
6.? ???格式化Primary與Standby,這里可以采用hadoop本身的格式化命令,也可以采用AvatarNode的格式化命令(bin/hadooporg.apache.hadoop.hdfs.AvatarShell -format),但此時(shí)shared1目錄不能為空,此處有點(diǎn)多余。建議采用hadoop本身的格式化命令在Primary上格式化后,并且把name目錄下的文件復(fù)制到shared0目錄下。然后再在Standby上復(fù)制shared0目錄下的文件到shared1目錄下。
五、啟動(dòng)
1.? ???由于不涉及jobtracker的單點(diǎn),在這里我們只啟動(dòng)hdfs相關(guān)線程。Primary,Standby兩個(gè)namenode(此處Standby包括SecondaryNamenode的職責(zé))和3個(gè)AvatarDataNode數(shù)據(jù)節(jié)點(diǎn)。
2.? ???在Primary節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarNode(Primary)
bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode–zero
3.? ???在Standby節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarNode(Standby)
bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode-one–standby
4.? ???依次在數(shù)據(jù)節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarDataNode
bin/hadooporg.apache.hadoop.hdfs.server.datanode.AvatarDataNode
5.? ???其他相關(guān)命令
bin/hadoop? ?org.apache.hadoop.hdfs.server.namenode.AvatarNode,后面可? ? 選參數(shù)有
[-standby] | [-sync] |[-zero] | [-one] | [-format] |??[-upgrade]? ?| [-rollback] |[-finalize] | [-importCheckpoint]
##查看當(dāng)前AvatarNode的狀態(tài)
1)? ?bin/hadoop org.apache.hadoop.hdfs.AvatarShell –showAvatar
##primary 把當(dāng)前Standby節(jié)點(diǎn)升級(jí)Primary節(jié)點(diǎn)
2) bin/hadooporg.apache.hadoop.hdfs.AvatarShell??-setAvatar
3)??bin/hadooporg.apache.hadoop.hdfs.AvatarShell -setAvatar standby
集群測試
1.? ???訪問集群的web頁
(Primary)http://hadoop1-virtual-machine:50070
(Standby)http://hadoop5-virtual-machine:50070
可見所有的AvatarDataNode都已注冊(cè)到兩個(gè)namenode,Primary處于正常狀態(tài),而Standby處于Safemode狀態(tài),只可讀不可寫。可通過AvatarShell命令查看當(dāng)前AvatarNode的狀態(tài)(Primary或Standby)。
2.? ???存儲(chǔ)相關(guān)數(shù)據(jù)到集群,集群正常工作。
3.? ???Kill掉Primary節(jié)點(diǎn)的AvatartNode線程,在Standby把當(dāng)前升級(jí)為Prirmary,數(shù)據(jù)并未丟失,集群正常工作(此時(shí)web端不能正常訪問文件系統(tǒng),通過shell命令可查看集群數(shù)據(jù))。但由于Avatar有轉(zhuǎn)換限制,只能由Standby轉(zhuǎn)換成Primary,故一次故障后,由Standby上升為Primary的節(jié)點(diǎn)并不能重新降級(jí)為Standby,所以不能實(shí)現(xiàn)像Master/Slave那種自由切換。
優(yōu)點(diǎn):信息不會(huì)丟失,恢復(fù)快(秒級(jí)) 缺點(diǎn):Facebook基于Hadoop0.2開發(fā)的,部署起來稍微麻煩;需要額外的機(jī)器資源,NFS成為又一個(gè)單點(diǎn)(不過故障率低) 4. Hadoop2.0直接支持StandBy NN,借鑒Facebook的Avatar,然后做了點(diǎn)改進(jìn)
優(yōu)點(diǎn):信息不會(huì)丟失,恢復(fù)快(秒級(jí)),部署簡單
詳細(xì)介紹Hadoop NameNode單點(diǎn)問題解決方案之一 AvatarNode
需求: 實(shí)現(xiàn)namenode元數(shù)據(jù)的備份,解決namenode單點(diǎn)宕機(jī)導(dǎo)致集群不可用的問題。 方案描述: 當(dāng)namenode所在服務(wù)器宕機(jī)的時(shí)候,我們可以利用namenode備份的元數(shù)據(jù)迅速重構(gòu)新的namenode來投入使用。 1.??Hadoop本身提供了可利用secondarynamenode的備份數(shù)據(jù)來恢復(fù)namenode的元數(shù)據(jù)的方案,但因?yàn)閏heckpoint(在每次 checkpoint的時(shí)候secondarynamenode才會(huì)合并并同步namenode的數(shù)據(jù))的問題,secondarynamenode的備份數(shù)據(jù)并不能時(shí)刻保持與namenode同步,也就是說在namenode宕機(jī)的時(shí)候secondarynamenode可能會(huì)丟失一段時(shí)間的數(shù)據(jù),這段 時(shí)間取決于checkpoint的周期。我們可以減小checkpoint的周期來減少數(shù)據(jù)的丟失量,但由于每次checkpoint很耗性能,而且這種方案也不能從根本上解決數(shù)據(jù)丟失的問題。所以如果需求上不允許這種數(shù)據(jù)的丟失,這種方案可直接不予考慮。 2.??Hadoop提供的另一種方案就是NFS,一種即時(shí)備份namenode元數(shù)據(jù)的方案,設(shè)置多個(gè)data目錄(包括NFS目錄),讓namenode在持 久化元數(shù)據(jù)的時(shí)候同時(shí)寫入多個(gè)目錄,這種方案較第一種方案的優(yōu)勢是能避免數(shù)據(jù)的丟失(這里我們暫時(shí)不討論NFS本身會(huì)丟失數(shù)據(jù)的可能性,畢竟這種幾率很小 很小)。既然可以解決數(shù)據(jù)丟失的問題,說明這套方案在原理上是可行的 下載源碼
https://github.com/facebook/hadoop-20
部署環(huán)境
機(jī)器4臺(tái)
hadoop1-192.168.64.41 AvatarNode(primary)
hadoop2-192.168.64.42 AvataDataNode
hadoop3-192.168.64.43 AvataDataNode
hadoop4- 192.168.64.67 AvatarNode(standby)
相關(guān)資源及描述
以下是Avatar方案部署相關(guān)的簡單介紹。
1.首先關(guān)于Avatar方案對(duì)于Hadoop的備份是對(duì)Dfs的的單點(diǎn)備份,并不包括Mapred,因?yàn)镠adoop本身就不存在處理jobtracker單點(diǎn)故障的機(jī)制。
2.AvatarNode繼承自Namenode,而并非對(duì)Namenode的修改,AvatarDataNode同樣亦如此。故Avatar的啟動(dòng)機(jī)制是獨(dú)立于Hadoop本身的啟動(dòng)機(jī)制。
3.在Avatar方案中,SecondaryNamenode的職責(zé)已包括在Standby節(jié)點(diǎn)中,故不需要再獨(dú)立啟動(dòng)一個(gè)SecondaryNamenode。
4.AvatarNode必須有NFS的支持,用以實(shí)現(xiàn)兩個(gè)節(jié)點(diǎn)間事務(wù)日志(editlog)的共享。
5.FB提供的Avatar源碼中暫時(shí)并不能實(shí)現(xiàn)Primary和Standby之間的自動(dòng)切換,可以借助于Zookeeper的lease機(jī)制來實(shí)現(xiàn)自動(dòng)切換。
6.Primary和Standby之間的切換只包括從Standby切換到Primary,并不支持從Primary狀態(tài)切換到Standby狀態(tài)。
7.AvatarDataNode并不使用VIP和AvatarNode通信,而是直接與Primary及Standby通信,故需要使用VIP漂移方案來屏蔽兩個(gè)節(jié)點(diǎn)間切換過程中的IP變換問題。有關(guān)與Zookeeper的整合,官方稱將在之后的版本發(fā)布。
關(guān)于AvatarNode更詳細(xì)的介紹,請(qǐng)參考http://blog.csdn.net/rzhzhz/article/details/7235789,
三、編譯
1.??首先修改hadoop根目錄下build.xml,注釋掉996行和1000行。如下:
<targetname="forrest.check"unless="forrest.home"depends="java5.check"> <!--fail message="'forrest.home' is not defined. Pleasepass-Dforrest.home=<base of Apache Forrest installation> to Antonthe command-line." /--> </target> <target name="java5.check" unless="java5.home"> <!--fail message="'java5.home' is not defined.??Forrest requires Java 5. Please pass -Djava5.home=<base of Java5 distribution> to Ant onthe command-line." /--> </target>
2.? ???在根目錄下輸入ant jar(對(duì)于編譯package可以參考build.xml的代碼)編譯hadoop,編譯后的jar包會(huì)在build目錄下(hadoop-0.20.3-dev-core.jar), 拷貝該jar包到hadoop根目錄下替換到原有的jar (啰嗦一句,hadoop啟動(dòng)時(shí)會(huì)先加載build目錄下的class,所以當(dāng)通過替換class修改jar包時(shí)請(qǐng)先把build目錄暫時(shí)移除掉) 。
3.??進(jìn)入src/contrib/highavailability目錄下編譯Avatar,編譯后的jar包會(huì)在build/contrib/highavailability目錄下(hadoop-${version}-highavailability.jar),拷貝該jar包到lib目錄下。
4.? ???把2,3步中編譯好的jar包分發(fā)到集群中所有機(jī)器的相應(yīng)目錄。
四、配置
1.? ???配置hdfs-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specificproperty overrides in thisfile. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/data/hadoop/hdfs/name</value>
<description>Determineswhereon the local filesystem the DFS name node shouldstore the name table. Ifthis is a??comma-delimited list ofdirectories then the name tableis replicated in all of thedirectories, for redundancy
</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/facebook_hadoop_data/hdfs/data</value>? ?? ?? ???
</property>
<property>
<name>dfs.datanode.address</name>
<value>0.0.0.0:50011</value>
<description>默認(rèn)為50010, 是datanode的監(jiān)聽端口</description>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50076</value>
<description>默認(rèn)為50075,為datanode的http server端口</description>
</property>
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:50021</value>
<description>默認(rèn)為50020, 為datanode的ipc server端口</description>
</property>
<property>
<name>dfs.http.address0</name>
<value>192.168.64.41:50070</value>
</property>
<property>
<name>dfs.http.address1</name>
<value>192.168.64.67:50070 </value>
</property>
<property>
<name>dfs.name.dir.shared0</name>
<value>/data/hadoop/share/shared0</value>
</property>
<property>
<name>dfs.name.dir.shared1</name>
<value>/data/hadoop/share/shared1</value>
</property>
<property>
<name>dfs.name.edits.dir.shared0</name>
<value>/data/hadoop/share/shared0</value>
</property>
<property>
<name>dfs.name.edits.dir.shared1</name>
<value>/data/hadoop/share/shared1</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>
Defaultblock replication. The actual number of replicationscan bespecified when the file is created. The default isused ifreplicationis not specified in create??time
</description>
</property>
</configuration>
參數(shù)說明:
1)??dfs.name.dir.shared0
AvatarNode(Primary)元數(shù)據(jù)存儲(chǔ)目錄,注意不能和dfs.name.dir目錄相同
2)??dfs.name.dir.shared1
AvatarNode(Standby)元數(shù)據(jù)存儲(chǔ)目錄,注意不能和dfs.name.dir目錄相同
3)??dfs.name.edits.dir.shared0
AvatarNode(Primary) edits文件存儲(chǔ)目錄,默認(rèn)與? ?? ?? ?? ???dfs.name.dir.shared0一致
4)??dfs.name.edits.dir.shared1
AvatarNode(Standby) edits文件存儲(chǔ)目錄,默認(rèn)與? ?? ?? ?dfs.name.dir.shared1一致
5)??dfs.http.address0
AvatarNode(Primary) HTTP的監(jiān)控地址
6)??dfs.http.address1
AvatarNode(Standby) HTTP的監(jiān)控地址
7)??dfs.namenode.dn-address0/dfs.namenode.dn-address1
雖然在Avatar源碼中有所涉及,但暫時(shí)并未用到
2.??配置core-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Putsite-specificproperty overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>A baseforother temporary directories.
</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.64.41:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
<property>
<name>fs.default.name0</name>
<value>hdfs://192.168.64.41:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
<property>
<name>fs.default.name1</name>
<value>hdfs://192.168.64.67:9600</value>
<description>The name ofthedefault file system. Eitherthe? ?? ?? ?? ?? ?? ? literal string"local" or a host:port for DFS.
</description>
</property>
</configuration>
參數(shù)說明:
1)??fs.default.name
當(dāng)前AvatarNode IP地址和端口號(hào),即Primary和Standby的配置為各自的IP地址和端口號(hào)。
2)??fs.default.name0
AvatarNode(Primary) IP地址和端口號(hào)
3)??fs.default.name1
AvatarNode(Standby)??IP地址和端口號(hào)
3.? ???因?yàn)椴簧婕暗絤apred,故mapred-site.xml不用作修改,為原有集群配置即可。
4.? ???分發(fā)修改后的配置文件到集群節(jié)點(diǎn)并在Primary和Standby節(jié)點(diǎn)上建立好配置文件中相應(yīng)目錄。
5.? ???建立NFS,實(shí)現(xiàn)Primary與Standby shared0目錄的數(shù)據(jù)共享。有關(guān)NFS的配置請(qǐng)參考http://blog.csdn.net/rzhzhz/article/details/7056732
6.? ???格式化Primary與Standby,這里可以采用hadoop本身的格式化命令,也可以采用AvatarNode的格式化命令(bin/hadooporg.apache.hadoop.hdfs.AvatarShell -format),但此時(shí)shared1目錄不能為空,此處有點(diǎn)多余。建議采用hadoop本身的格式化命令在Primary上格式化后,并且把name目錄下的文件復(fù)制到shared0目錄下。然后再在Standby上復(fù)制shared0目錄下的文件到shared1目錄下。
五、啟動(dòng)
1.? ???由于不涉及jobtracker的單點(diǎn),在這里我們只啟動(dòng)hdfs相關(guān)線程。Primary,Standby兩個(gè)namenode(此處Standby包括SecondaryNamenode的職責(zé))和3個(gè)AvatarDataNode數(shù)據(jù)節(jié)點(diǎn)。
2.? ???在Primary節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarNode(Primary)
bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode–zero
3.? ???在Standby節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarNode(Standby)
bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode-one–standby
4.? ???依次在數(shù)據(jù)節(jié)點(diǎn)hadoop根目錄下啟動(dòng)AvatarDataNode
bin/hadooporg.apache.hadoop.hdfs.server.datanode.AvatarDataNode
5.? ???其他相關(guān)命令
bin/hadoop? ?org.apache.hadoop.hdfs.server.namenode.AvatarNode,后面可? ? 選參數(shù)有
[-standby] | [-sync] |[-zero] | [-one] | [-format] |??[-upgrade]? ?| [-rollback] |[-finalize] | [-importCheckpoint]
##查看當(dāng)前AvatarNode的狀態(tài)
1)? ?bin/hadoop org.apache.hadoop.hdfs.AvatarShell –showAvatar
##primary 把當(dāng)前Standby節(jié)點(diǎn)升級(jí)Primary節(jié)點(diǎn)
2) bin/hadooporg.apache.hadoop.hdfs.AvatarShell??-setAvatar
3)??bin/hadooporg.apache.hadoop.hdfs.AvatarShell -setAvatar standby
集群測試
1.? ???訪問集群的web頁
(Primary)http://hadoop1-virtual-machine:50070
(Standby)http://hadoop5-virtual-machine:50070
可見所有的AvatarDataNode都已注冊(cè)到兩個(gè)namenode,Primary處于正常狀態(tài),而Standby處于Safemode狀態(tài),只可讀不可寫。可通過AvatarShell命令查看當(dāng)前AvatarNode的狀態(tài)(Primary或Standby)。
2.? ???存儲(chǔ)相關(guān)數(shù)據(jù)到集群,集群正常工作。
3.? ???Kill掉Primary節(jié)點(diǎn)的AvatartNode線程,在Standby把當(dāng)前升級(jí)為Prirmary,數(shù)據(jù)并未丟失,集群正常工作(此時(shí)web端不能正常訪問文件系統(tǒng),通過shell命令可查看集群數(shù)據(jù))。但由于Avatar有轉(zhuǎn)換限制,只能由Standby轉(zhuǎn)換成Primary,故一次故障后,由Standby上升為Primary的節(jié)點(diǎn)并不能重新降級(jí)為Standby,所以不能實(shí)現(xiàn)像Master/Slave那種自由切換。
總結(jié)
以上是生活随笔為你收集整理的Hadoop中Namenode单点故障的解决方案及详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssh免密码和ssh-copy-id命令
- 下一篇: redis安装,主从集群