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中添加:
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
>
</
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
參考本手冊操作過程中,如遇實際錯誤,請自行查閱相關日志文件排除錯誤。