Hadoop 雙機熱備-AvatarNode部署

Hadoop 雙機熱備

--AvatarNode部署

部署環境

虛擬機5臺(1G內存,40G硬盤,ubuntu操作系統,Hadoop-0.20.2

hadoop1-virtual-machine  10.10.11.250 AvatarNode(primary)

hadoop2-virtual-machine  10.10.11.152 AvataDataNode

hadoop3-virtual-machine  10.10.11.160 AvataDataNode

hadoop4-virtual-machine  10.10.11.184 AvataDataNode

hadoop5-virtual-machine  10.10.12.25  AvatarNode(standby)

 

相關資源及描述

以下是Avatar方案部署相關的簡單介紹。

1.首先關於Avatar方案對於Hadoop的備份是對Dfs的的單點備份,並不包括Mapred,因爲Hadoop本身就不存在處理jobtracker單點故障的機制。

2.AvatarNode繼承自Namenode,而並非對Namenode的修改,AvatarDataNode同樣亦如此。故Avatar的啓動機制是獨立於Hadoop本身的啓動機制。

3.在Avatar方案中,SecondaryNamenode的職責已包括在Standby節點中,故不需要再獨立啓動一個SecondaryNamenode

4.AvatarNode必須有NFS的支持,用以實現兩個節點間事務日誌(editlog)的共享。

5.FB提供的Avatar源碼中暫時並不能實現PrimaryStandby之間的自動切換,可以藉助於Zookeeperlease機制來實現自動切換。

6.PrimaryStandby之間的切換隻包括從Standby切換到Primary,並不支持從Primary狀態切換到Standby狀態。

7.AvatarDataNode並不使用VIPAvatarNode通信,而是直接與PrimaryStandby通信,故需要使用VIP漂移方案來屏蔽兩個節點間切換過程中的IP變換問題。有關與Zookeeper的整合,官方稱將在之後的版本發佈。

關於AvatarNode更詳細的介紹,請參考http://blog.csdn.net/rzhzhz/article/details/7235789

部署

一、下載補丁包

         下載地址[HDFS-976]

         在主頁面下載AvatarNode.20.patch這個補丁包(基於Hadoop-0.20.2),其他補丁包請參考官方介紹。

          

二、安裝補丁包

1.     把下載好的AvatarNode.20.patch補丁包,放到hadoop的根目錄下

2.     在hadoop根路徑下輸入命令patch –p0< AvatarNode.20.patch, 會把相關源碼的修改寫入java文件中。

3.  因爲該補丁包中的Standby類(341行)中有一行代碼調用了0.20.2中沒有的方法fsImage.saveNamespace(true);把該行註釋掉並改成0.20.2中方法fsImage.saveFSImage();

4.     修改org.apache.hadoop.hdfs.server.namenode.FSNamesystem類(4310行),註釋掉checkSuperuserPrivilege();因爲後面在啓動standby的時候會因爲ugi=null的錯誤導致standby無法正常啓動。

三、編譯

1.  首先修改hadoop根目錄下build.xml,註釋掉904行和908行。如下:

<targetname="forrest.check" unless="forrest.home"depends="java5.check">
<!--fail message="'forrest.home' is not defined. Please pass-Dforrest.home=&lt;base of Apache Forrest installation&gt; to Ant onthe 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=&lt;base of Java5 distribution&gt; to Ant on the command-line." /-->
</target>

2.     在根目錄下輸入ant jar(對於編譯package可以參考build.xml的代碼)編譯hadoop,編譯後的jar包會在build目錄下(hadoop-0.20.3-dev-core.jar), 拷貝該jar包到hadoop根目錄下替換到原有的jar (囉嗦一句,hadoop啓動時會先加載build目錄下的class,所以當通過替換class修改jar包時請先把build目錄暫時移除掉) 。

3.  進入src/contrib/highavailability目錄下編譯Avatar,編譯後的jar包會在build/contrib/highavailability目錄下(hadoop-${version}-highavailability.jar),拷貝該jar包到lib目錄下。

4.     把2,3步中編譯好的jar包分發到集羣中所有機器的相應目錄。

四、配置

1.     配置hdfs-site.xml

<?xmlversion="1.0"?>

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

 

<!-- Put site-specificproperty overrides in this file. -->

 

<configuration>

       <property>

               <name>dfs.name.dir</name>

               <value>/home/hadoop/name</value>

               <description>Determineswhere on the local filesystem the                       DFS name node shouldstore the name table. If this is a                 comma-delimited list ofdirectories then the name table is                      replicated in all of thedirectories, for redundancy.

               </description>

       </property>

       <property>

               <name>dfs.data.dir</name>

               <value>/home/hadoop/data</value>

               <description>

               </description>

       </property>

       <property>

               <name>dfs.http.address0</name>

                <value>hadoop1-virtual-machine:50070</value>

       </property>

       <property>

               <name>dfs.http.address1</name>

               <value>hadoop5-virtual-machine:50070</value>

       </property>

       <property>

               <name>dfs.name.dir.shared0</name>

               <value>/home/hadoop/share/shared0</value>

       </property>

       <property>

               <name>dfs.name.dir.shared1</name>

               <value>/home/hadoop/share/shared1</value>

       </property>

       <property>

               <name>dfs.name.edits.dir.shared0</name>

               <value>/home/hadoop/share/shared0</value>

       </property>

       <property>

               <name>dfs.name.edits.dir.shared1</name>

               <value>/home/hadoop/share/shared1</value>

       </property>

       <property>

           <name>dfs.replication</name>

               <value>3</value>

               <description>Defaultblock replication. The actual number of                    replications can bespecified when the file is created. The                     default isused ifreplication is not specified in create                        time.

               </description>

       </property>

</configuration>

參數說明:

1)  dfs.name.dir.shared0

AvatarNode(Primary)元數據存儲目錄,注意不能和dfs.name.dir目錄相同

2)  dfs.name.dir.shared1

AvatarNode(Standby)元數據存儲目錄,注意不能和dfs.name.dir目錄相同

3)  dfs.name.edits.dir.shared0

AvatarNode(Primary) edits文件存儲目錄,默認與               dfs.name.dir.shared0一致

4)  dfs.name.edits.dir.shared1

AvatarNode(Standby) edits文件存儲目錄,默認與          dfs.name.dir.shared1一致

5)  dfs.http.address0

AvatarNode(Primary) HTTP的監控地址

6)  dfs.http.address1

AvatarNode(Standby) HTTP的監控地址

7)  dfs.namenode.dn-address0/dfs.namenode.dn-address1

雖然在Avatar源碼中有所涉及,但暫時並未用到

2.  配置core-site.xml

<?xmlversion="1.0"?>

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

 

<!-- Put site-specificproperty overrides in this file. -->

 

<configuration>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>/home/hadoop/tmp</value>

               <description>A base forother temporary directories.

               </description>

       </property>

       <property>

               <name>fs.default.name</name>

               <value>hdfs://hadoop1-virtual-machine:9000</value>

               <description>The name ofthe default file system. Either the                    literal string"local" or a host:port for DFS.

               </description>

       </property>

       <property>

               <name>fs.default.name0</name>

               <value>hdfs://hadoop1-virtual-machine:9000</value>

               <description>The name ofthe default file system. Either the                    literal string"local" or a host:port for DFS.

               </description>

       </property>

       <property>

               <name>fs.default.name1</name>

               <value>hdfs://hadoop5-virtual-machine:9000</value>

               <description>The name ofthe default file system. Either the                    literal string"local" or a host:port for DFS.

               </description>

       </property>

</configuration>

參數說明:

1)  fs.default.name

當前AvatarNode IP地址和端口號,即PrimaryStandby的配置爲各自的IP地址和端口號。

2)  fs.default.name0

AvatarNode(Primary) IP地址和端口號

3)  fs.default.name1

AvatarNode(Standby)  IP地址和端口號

3.     因爲不涉及到mapred,故mapred-site.xml不用作修改,爲原有集羣配置即可。

4.     分發修改後的配置文件到集羣節點並在PrimaryStandby節點上建立好配置文件中相應目錄。

5.     建立NFS,實現PrimaryStandby shared0目錄的數據共享。有關NFS的配置請參考http://blog.csdn.net/rzhzhz/article/details/7056732

6.     格式化PrimaryStandby,這裏可以採用hadoop本身的格式化命令,也可以採用AvatarNode的格式化命令(bin/hadoop org.apache.hadoop.hdfs.AvatarShell -format),但此時shared1目錄不能爲空,此處有點多餘。建議採用hadoop本身的格式化命令在Primary上格式化後,並且把name目錄下的文件複製到shared0目錄下。然後再在Standby上覆制shared0目錄下的文件到shared1目錄下。

五、啓動

1.     由於不涉及jobtracker的單點,在這裏我們只啓動hdfs相關線程。PrimaryStandby兩個namenode此處Standby包括SecondaryNamenode的職責3AvatarDataNode數據節點。

2.     在Primary節點hadoop根目錄下啓動AvatarNodePrimary

      bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode –zero

3.     在Standby節點hadoop根目錄下啓動AvatarNodeStandby

      bin/hadooporg.apache.hadoop.hdfs.server.namenode.AvatarNode -one –standby

4.     依次在數據節點hadoop根目錄下啓動AvatarDataNode

      bin/hadooporg.apache.hadoop.hdfs.server.datanode.AvatarDataNode

5.     其他相關命令

bin/hadoop   org.apache.hadoop.hdfs.server.namenode.AvatarNode,後面可    選參數有

[-standby] | [-sync] | [-zero] | [-one] | [-format] |  [-upgrade]   | [-rollback] | [-finalize] | [-importCheckpoint]

  

1)  bin/hadoop org.apache.hadoop.hdfs.AvatarShell –showAvatar 查看當前AvatarNode的狀態

 

2)     bin/hadoop org.apache.hadoop.hdfs.AvatarShell  -setAvatar primary 把當前Standby節點升級Primary節點

 

3)  bin/hadoop org.apache.hadoop.hdfs.AvatarShell -setAvatar standby

 

集羣測試

1.     訪問集羣的web

(Primary)http://hadoop1-virtual-machine:50070

(Standby)http://hadoop5-virtual-machine:50070

可見所有的AvatarDataNode都已註冊到兩個namenodePrimary處於正常狀態,而Standby處於Safemode狀態,只可讀不可寫。可通過AvatarShell命令查看當前AvatarNode的狀態(PrimaryStandby)。

2.     存儲相關數據到集羣,集羣正常工作。

3.     KillPrimary節點的AvatartNode線程,在Standby把當前升級爲Prirmary,數據並未丟失,集羣正常工作(此時web端不能正常訪問文件系統,通過shell命令可查看集羣數據)。但由於Avatar有轉換限制,只能由Standby轉換成Primary,故一次故障後,由Standby上升爲Primary的節點並不能重新降級爲Standby,所以不能實現像Master/Slave那種自由切換。

 

發佈了51 篇原創文章 · 獲贊 11 · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章