搭建 hadoop2 自動切換HA 集羣

hadoop2 比 hadoop1的一些新的功能:

其中HA解決了hadoop1的單點故障問題

1) 各節點:
namenode:master   slave3
datanode:slave1  slave2  slave3

journalnode:master  slave1  slave3

zookeeper: master  slave1  slave3

 

2)hadoop2 搭建在手工切換ha的集羣基礎上:

a) 關閉所有啓動角色
b) 刪除所有機器/usr/local/hadoop/tmp 和 /usr/local/hadoop/logs的內容


3) zookeeper集羣安裝:


  1. a) master上安裝zookeeper  

  2.     a.1)把conf/zoo_sample.cfg重命名爲conf/zoo.cfg  mv zoo_sample.cfg zoo.cfg  

  3.     a.2)修改文件conf/zoo.cfg  

  4.      1)dataDir=/usr/local/zookeeper/data  

  5.      2)增加以下內容  

  6.      server.1=master:2888:3888   

  7. ---> 標識1 是master對應在zookeeper集羣的編號 2888:3888是數據通信端口  

  8.      server.2=slave1:2888:3888  

  9. ---> 標識2 是slave1對應在zookeeper集羣的編號 2888:3888是數據通信端口  

  10.      server.3=slave3:2888:3888

  11. ---> 標識3 是slave3對應在zookeeper集羣的編號 2888:3888是數據通信端口  

  12.     a.3) mkdir zookeeper/data   

  13.     [root@master zookeeper]# mkdir data  

  14.     a.4) 寫入文件echo 1到 zookeeper/data/myid 這樣在本機master內寫上標識1 兩者關聯起來  

  15.     [root@master zookeeper]# echo 1 > data/myid  

  16.   

  17.       

  18. b) 複製zookeeper文件夾到slave1、slave3上  

  19.   

  20.     scp -rq zookeeper  slave1:/usr/local  

  21.     scp -rq zookeeper  slave3:/usr/local  

  22.       

  23.       

  24. c) 其餘節點寫標識  

  25.     在slave1上執行命令echo 2 zookeeper/data/myid  

  26.     在slave3上執行命令echo 3 zookeeper/data/myid  

  27.   

  28.   

  29. d) 啓動和驗證  

  30.     在master  slave1  slave3上,分別執行命令zookeeper/bin/zkServer.sh start  

  31.     執行命令zookeeper/bin/zkServer.sh status 可以看到三個節點的狀態 哪個是leader 哪個是follower   

  32.     直接開啓

 

4) hdfs配置文件:(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)

 


  1. 2.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)  

  2. 2.1.1 hadoop-env.sh  

  3.   export JAVA_HOME=/usr/local/jdk  

  4. 2.1.2 core-site.xml  

  5.   

  6. <property>  

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

  8. <value>hdfs://cluster1</value>  

  9. </property>  

  10.   

  11. <property>  

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

  13. <value>/usr/local/hadoop/tmp</value>  

  14. </property>  

  15.   

  16. <property>  

  17. <name>ha.zookeeper.quorum</name>    ------ 配置zk集羣  

  18. <value>master:2181,slave1:2181,  slave3:2181</value>  

  19. </property>  

  20.   

  21.   

  22. 2.1.3 hdfs-site.xml  

  23. <property>  

  24. <name>dfs.replication</name>  

  25. <value>3</value>  

  26. </property>  

  27.   

  28. <property>  

  29. <name>dfs.nameservices</name> ----每個nameservice對應一個hdfs集羣  

  30. <value>cluster1</value>  

  31. </property>  

  32.   

  33. <property>  

  34. <name>dfs.ha.namenodes.cluster1</name>  

  35. <value>master,slave3</value>  

  36. </property>  

  37.   

  38. <property>  

  39. <name>dfs.namenode.rpc-address.cluster1.master</name>  

  40. <value>master:9000</value>  

  41. </property>  

  42.   

  43. <property>  

  44. <name>dfs.namenode.http-address.cluster1.master</name>  

  45. <value>master:50070</value>  

  46. </property>  

  47.   

  48. <property>  

  49. <name>dfs.namenode.rpc-address.cluster1.slave3</name>  

  50. <value>slave3:9000</value>  

  51. </property>  

  52.   

  53. <property>  

  54. <name>dfs.namenode.http-address.cluster1.slave3</name>  

  55. <value>slave3:50070</value>  

  56. </property>  

  57.   

  58. <property>  

  59. <name>dfs.ha.automatic-failover.enabled.cluster1</name>  

  60. <value>true</value>  

  61. </property>  

  62.   

  63. <property>  

  64. <name>dfs.namenode.shared.edits.dir</name>  

  65. <value>qjournal://master:8485;slave1:8485;slave3:8485/cluster1</value>  

  66. </property>  

  67.   

  68. <property>  

  69. <name>dfs.journalnode.edits.dir</name>  

  70. <value>/usr/local/hadoop/tmp/journal</value>  

  71. </property>  

  72.   

  73. <property>  

  74. <name>dfs.ha.fencing.methods</name>  

  75. <value>

  76.   sshfence

  77.    shell(/bin/true)

  78. </value>  

  79. </property>  

  80.   

  81. <property>  

  82. <name>dfs.ha.fencing.ssh.private-key-files</name>  

  83. <value>/root/.ssh/id_rsa</value>  

  84. </property>  

  85.   

  86. <property>  

  87. <name>dfs.client.failover.proxy.provider.cluster1</name>  

  88. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  

  89. </property>  

  90.   

  91. 2.1.6 slaves -----> 指定NodeManager 和 datanode   

  92. slave1    

  93. slave2    

  94. slave3    

 

 

 

5) 刪除其他節點的hadoop文件夾,修改好後拷貝到其餘節點
scp -r /usr/local/hadoop   其他:/usr/local/

 

6) 啓動hadoop2 hdfs集羣

 


  1. 6.1) 格式化zk集羣  

  2.   在master上執行hadoop2.5/bin/hdfs zkfc -formatZK   此操作僅僅表示和zk集羣發生關聯  

  3.   15/01/11 18:14:20 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/cluster1 in ZK.  

  4. 3在zookeeper中初始化 

  5. $HADOOP_HOME/bin/hdfs zkfc -formatZK

  6. 運行這個命令後,會在zookeeper上創建一個/hadoop-ha/mycluster/的znode,用來存放automatic  failover的數據

  7. 4 啓動zkfc(zookeeper failover controller) 

  8. 需要在namenode1和namenode2上都啓動zkfc daemon進程。

  9. $HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc


  10. 6.2) 啓動journalnode集羣  

  11.   在master、slave1slave3上分別執行hadoop/sbin/hadoop-daemon.sh start journalnode  

  12. 6.3) 格式化namenode、啓動namenode 

  13. 在[nn1]上,對其進行格式化,並啓動: 

  14.   在h2master上執行bin/hdfs namenode -format  

  15.   在h2master上執行sbin/hadoop-daemon.sh start namenode 

  16. 在[nn2]上,同步nn1的元數據信息: 

  17.   在h2master2上執行bin/hdfs namenode -bootstrapStandby  

  18.   在h2master2上執行sbin/hadoop-daemon.sh start namenode  

  19. 6.4)  啓動datanode  

  20.   在h2master上執行hadoop/sbin/hadoop-daemons.sh start datanode   啓動所有datanode節點  

  21.   此時訪問如下鏈接  

  22.   http://master:50070/ http://slave3:50070/  

  23.   兩個namenode都是standby狀態  

  24. 6.5)  啓動ZKFC (FailoverController) 必須是在namenode節點上啓動 讓zk來決定用哪個namenode作爲active  

  25.   在master、slave3上 啓動zkfc,執行命令sbin/hadoop-daemon.sh start zkfc  

  26.   此時訪問   http://master:50070/ http://slave3:50070/ 結果如下:  

  27.   Overview 'master:9000' (active)  

  28.   Overview 'slave3:9000' (standby)  

 

7) 驗證自動切換:

 

  關閉master的namenode進程: 
  再次刷新
   http://h2master:50070/ http://slave3:50070/ 結果如下:
   Overview 'slave3:9000' (active)  ----> zk自動切換節點slave3爲active狀態
   master無法連接

 

8) 總結:自動切換比手工切換多出來的步驟


  (1)配置上core-site.xml增加了配置項ha.zookeeper.quorum(zk集羣的配置);
     hdfs-site.xml中把dfs.ha.automatic-failover.enabled.cluster1改爲true


  (3)操作上格式化zk,執行命令bin/hdfs zkfc -formatZK;
     啓動zkfc,執行命令sbin/hadoop-daemon.sh start zkfc


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章