本文轉自:http://www.micmiu.com/bigdata/hadoop/hadoop2-cluster-ha-setup/?utm_source=tuicool&utm_medium=referral
[一]、 引言
在Hadoop2.x初期的時候寫過一篇 hadoop 2.2.0 集羣模式安裝配置和測試,記錄了分佈式搭建的最基本的搭建步驟和運行演示,那篇文章中沒有對HA的配置做實驗,本文會詳細介紹 Hadoop2的分佈式、NameNode配置HA以及ResourceManage配置HA的實驗過程。
[二]、 實驗環境
1、各節點及角色分配
本文以5個集羣節點爲基礎做實驗環境,具體的角色分配如下:
hostname | NameNode | DataNode | JournalNode | Zookeeper | ZKFC | ResourceManager |
nn1.hadoop | √(Active) | √ | √ | √ | √ | |
nn2.hadoop | √(Standby) | √ | √ | √ | √ | |
dn1.hadoop | √ | √ | √ | |||
dn2.hadoop | √ | |||||
dn3.hadoop | √ |
2、系統及軟件版本
- CentOS 6.3 64位
- Java 1.7.0_75
- Hadoop 2.6.0
- zookeeper 3.4.6
3、安裝JDK (所有節點需要操作)
Oracle官方下載 64爲 jdk :jdk-7u3-linux-x64.rpm 執行安裝命令:
rpm -ivh jdk-7u3-linux-x64.rpm
默認的安裝路徑:/usr/java/jdk1.7.0_75
4、配置hosts (所有節點需要操作)
5、確認SSHD已經安裝並啓動 (所有節點需要操作)
6、配置時鐘同步
第一種方法 :(所有節點都要操作)都從公共NTP服務器同步,執行如下:
第二種方法:選一個節點搭建一個NTP服務,其他節點從該NTP服務器同步
7、創建專有用戶(所有節點需要操作)
比如創建 hadoop用戶,密碼也初始化爲hadoop, 下面有關hadoop部署配置都是以這個用戶操作的
爲hadoop 用戶修改環境變量 vi ~/.bash_profile
:
8、SSH免密碼登陸
配置所有的NameNode節點 可以免密碼登錄到其餘所有節點,只需要單向免密登錄即可,當然你要配置爲雙向也無妨。有關SSH無密碼登錄的詳細介紹可以參見:Linux(Centos)配置OpenSSH無密碼登陸
[三]、 實驗過程
1、hadoop2的編譯
在實驗環境中任節點機器上 下載hadoop 2.6.0的源碼,安裝配置好Java 和Maven 然後執行 mvn package -Pdist,native -DskipTests -Dtar
進行源碼編譯,具體可參考:
2、zookeeper安裝配置
下載最新穩定版本(3.4.6)部署在ZK的各個節點,修改環境變量vi ~/.bash_profile
:
修改配置文件:
修改成如下:
配置文件中的相關目錄路徑需要先創建好且hadoop用戶具有讀寫權限,不同zk節點配置不同的myid:
- 在zk1.hadoop 節點中 執行:echo 1 > /bigdata/hadoop/zookeeper/zkdata/myid
- 在zk2.hadoop 節點中 執行:echo 2 > /bigdata/hadoop/zookeeper/zkdata/myid
- 在zk3.hadoop 節點中 執行:echo 3 > /bigdata/hadoop/zookeeper/zkdata/myid
myid中的數值需要和 zoo.cfg中的配置一致。
3、hadoop 安裝配置(所有節點需要修改)
3.1、配置環境變量vi ~/.bash_profile
:
3.2、修改 $HADOOP_HOME/etc/hadoop/core-site.xml
3.3、修改 $HADOOP_HOME/etc/hadoop/hfds-site.xml
3.4、修改 $HADOOP_HOME/etc/hadoop/yarn-site.xml
PS: yarn-site.xml中的HA相關配置格式和hdfs-site.xml中的HA配置類似。
3.5、修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml
3.6、修改 $HADOOP_HOME/etc/hadoop/salves
4、啓動步驟和詳細過程:
4.1、啓動ZK
在所有的ZK節點執行命令: zkServer.sh start
可藉助命令 zkServer.sh status
查看各個ZK的從屬關係
4.2、格式化ZK(僅第一次需要做)
任意ZK節點上執行:hdfs zkfc -formatZK
4.3、啓動ZKFC
ZKFC(zookeeperFailoverController)是用來監控NN狀態,協助實現主備NN切換的,所以僅僅在主備NN節點上啓動就行。
4.4、啓動JournalNode 用於主備NN之間同步元數據信息的共享存儲系統, 在每個JN節點上啓動:
4.5、格式化並啓動主NN
格式化:hdfs namenode -format
注意:只有第一次啓動系統時需格式化,請勿重複格式化!
在主NN節點執行命令啓動NN: hadoop-daemon.sh start namenode
可以對比查看啓動前後NN節點的進程:
4.6、在備NN上同步主NN的元數據信息hdfs namenode -bootstrapStandby
4.7、啓動備NN
在備NN上執行命令:hadoop-daemon.sh start namenode
4.8、設置和確認主NN
本文配置的是自動切換,ZK已經自動選擇一個節點作爲主NN了,所以這一步可以省略,查看節點狀態:
如果是配置手動切換NN的,這一步是不可缺少的,因爲系統還不知道誰是主NN,兩個節點的NN都是Standby狀態。手動激活主NN的命令:hdfs haadmin -transitionToActive nn1
4.9、在主NN上啓動Datanode
啓動所有datanode命令:hadoop-daemons.sh start datanode
注意:hadoop-daemons.sh 和 hadoop-daemon.sh 命令的差異
4.10、啓動YARN
方法一:一次性啓動ResourceManager和NodeManager命令:start-yarn.sh
方法二:分別啓動ResourceManager和NodeManager:
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
(如果有多個datanode,需使用yarn-daemons.sh)
ResourceManager 也配置了HA,根據命令查看節點狀態:
yarn rmadmin –getServiceState serviceid
4.11 啓動MR JobHistory Server
在dn1.hadoop上運行MRJS :mr-jobhistory-daemon.sh start historyserver
4.12、驗證NameNode 和ResourceManager 的HA是否生效
把當前主節點中的相關進程kill掉 查看各節點狀態切換情況。
4.13、驗證NN HA的透明性
注意驗證 hdfs dfs -ls
/ 和 hdfs dfs -ls hdfs://mycluster/
的訪問效果是一致的:
1
2
3
4
5
6
7
8
9
|
[hadoop@nn1
~]$
hdfs
dfs
-ls
/
Found
2
items
drwx------
-
hadoop
supergroup 0
2015-02-02
23:42
/tmp
drwxr-xr-x
-
hadoop
supergroup 0
2015-02-02
23:39
/user
[hadoop@nn1
~]$
hdfs
dfs
-ls
hdfs://mycluster/
Found
2
items
drwx------
-
hadoop
supergroup 0
2015-02-02
23:42
hdfs://mycluster/tmp
drwxr-xr-x
-
hadoop
supergroup 0
2015-02-02
23:39
hdfs://mycluster/user
[hadoop@nn1
~]$
|
[五]、 運行wrodcount demo
這個demo的演示可參考:hadoop 2.2.0 集羣模式安裝配置和測試 中的 wordcount演示步驟,這裏不再重複描述了。