hadoop namenode ha--手動切換(轉)


1.hadoop的dfs.nameservices如何配置?
2.集群配置中hdfs://mycluster的作用是什么?
3.如何將namenode2切換為active狀態?






在參考本手冊前請確保Hadoop中HDFS組件已經成功部署並正常運行,同時系統基本環境完備,包括ssh免密碼登錄、/etc/hosts等。
         假設目前NameNode在服務器namenode1上運行,服務器namenode2作為standbynamenode,確保namenode2上至少已經安裝了namenode服務。
         操作過程中盡量避免使用root用戶操作,這里假設使用hadoop用戶操作,具體部署步驟如下:
1.        關閉所有節點上的HDFS進程,主要是namenode1上的namenode和datanode進程。
2.        修改系統配置文件core-site.xml和hdfs-site.xml

  • hdfs-site.xml中添加:

 

[XML]  純文本查看 復制代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!-- HA Setup Head !--> 
          < property >
            < name >dfs.nameservices</ name >
            < value >mycluster</ value >
          </ property >
 
          < property >
            < name >dfs.ha.namenodes.mycluster</ name >
            < value >nn1,nn2</ value >
          </ property >
 
          < property >
            < name >dfs.namenode.rpc-address.mycluster.nn1</ name >
            < value > namenode1:8020</ value >
          </ property >
          < property >
            < name >dfs.namenode.rpc-address.mycluster.nn2</ name >
            < value > namenode2:8020</ value >
          </ property >
 
          < property >
            < name >dfs.namenode.shared.edits.dir</ name >
            < value >qjournal://namenode1:8485;namenode2:8485/mycluster</ value >
          </ property >
 
          < property >
            < name >dfs.client.failover.proxy.provider.mycluster</ name >
            < value >org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</ value >
          </ property >
 
          < property >
            < name >dfs.ha.fencing.methods</ name >
            < value >sshfence</ value >
          </ property >
          < property >
            < name >dfs.ha.fencing.ssh.private-key-files</ name >
            < value >/home/hadoop/.ssh/id_rsa</ value >
          </ property >
     < property >
            < name >dfs.ha.fencing.ssh.connect-timeout</ name >
            < value >30000</ value >
          </ property >
 
          < property >
            < name >dfs.journalnode.edits.dir</ name >
            < value >/path/to/hdfs/jn</ value >
          </ property >
 
<!-- HA Setup End !-->



  • core-site.xml中修改

 

fs.default hdfs://mycluster

注意:這些更改需要更新到每個運行HDFS進程的節點。
其中,namenode1和namenode2在hdfs-site.xml中有一項配置不同:

服務器 配置項
namenode1 dfs.namenode.http-address namenode1:50070
namenode2 dfs.namenode.http-address namenode2:50070



3.        分別在namenode1和namenode2上啟動journalnode:
$HADOOP_HOME/sbin/hadoop-daemon.sh start  journalnode

4.        在namenode1上對journalnode的共享數據進行初始化,然后啟動namenode進程:
$HADOOP_HOME/bin/hdfsnamenode  -initializeSharedEdits
$HADOOP_HOME/sbin/hadoop-daemon.sh start  namenode


5.        在namenode2上同步journalnode的共享數據,然后啟動namenode進程:
$HADOOP_HOME/bin/hdfsnamenode  -bootstrapStandby
$HADOOP_HOME/sbin/hadoop-daemon.sh start  namenode

6.        分別在namenode1和namenode2中啟動datanode:
$HADOOP_HOME/sbin/hadoop-daemon.sh  start datanode

7.        此時如果通過網頁訪問兩個namenode的http-address,可以看到兩個namenode都是standby狀態,也可以通過hadoop自帶的命令行工具來查看狀態:
$HADOOP_HOME/bin/hdfs  haadmin -getServiceState  nn1
注意:此處的nn1為在hdfs-site.xml中配置的namenode服務的名稱。


8.        確定要轉為active的namenode的id,這里將namenode1設為active,使用命令行工具進行狀態切換:
$HADOOP_HOME/bin/hdfs  haadmin -failover --forcefence --forceactive  nn2  nn1
注意:此處“nn2  nn1”的順序表示active狀態由nn2轉換到nn1上(雖然nn2在轉化前也是standby狀態)。


9.        上一步中把namenode1的狀態切換為active后,系統自動把namenode2上的namenode進程關閉,再把錯誤原因排除后重啟該namenode進程,啟動后該namenode狀態為standby,等待下一次namenode1出現故障時即可將namenode2狀態切換為active,使用命令行工具:
$HADOOP_HOME/bin/hdfs  haadmin -failover --forcefence --forceactive  nn1  nn2
         相應的,轉換完以后namenode1上的namenode進程被關閉,需要排除故障后重新啟動。

10.hdfs haadmin 

查考這里:http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

 



參考本手冊操作過程中,如遇實際錯誤,請自行查閱相關日志文件排除錯誤。


免責聲明!

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



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