HA搭建和部署
HA叢集安裝部署
1 執行環境
1.1 軟體環境
四個節點
OS:64位RHEL5及以上或者64位CentOS6.0及以上
JVM:預裝64位JDK 1.8及以上版本
1.2 瀏覽器要求
Firefox 39.0.0版本及以上或者Google Chrome 54.0.2840.8版本及以上。
BEH-Manager-4.1.2安裝包於官方網站下載:http://beh.pezy.cn/
2 安裝準備
2.1準備虛擬機器
準備四個節點的虛擬機器
2.2 修改主機名
所有節點分別操作,在各個節點執行以下操作來修改主機名,使叢集下的主機有格式一個統一的主機名,以便後續的操作和維護。
使用root使用者修改主機名
vim /etc/sysconfig/network
檔案內容修改為:
hadoop001
(hadoop001為想改的主機名,分別修改自己的)
在對應主機上執行以下命令,使主機名生效:
hostname hadoop***
注:主機名(hadoop0**)與主機相對應。
2.3 關閉防火牆
通過setup命令關閉防火牆
注:要使用root使用者
2.4 修改主機名列表
使用root使用者修改/etc/hosts (所有節點都操作,且內容相同)
vim /etc/hosts
新增以下內容:
192.168.9.10 hadoop001 192.168.9.11 hadoop002 192.168.9.12 hadoop003 192.168.9.13 hadoop004 ……
2.5 配置時間同步
2.5.1配置自動時鐘同步
該項同時需要在所有節點配置。
使用Linux命令配置
[[email protected] ~]$ crontab -e
該命令是vi編輯命令,按i進入插入模式,按Esc,然後鍵入:wq儲存退出
鍵入下面的一行程式碼,輸入i,進入插入模式(星號之間和前後都有空格)
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
2.5.2手動同步時間
直接在Terminal執行下面的命令:
[[email protected] ~]$ /usr/sbin/ntpdate cn.pool.ntp.org
2.6 配置免祕鑰登入
lan使用者登入hadoop001節點,執行以下指令生成一對金鑰(hadoop使用者下)
ssh-keygen –t rsa
回車——回車——回車
登入hadoop002節點生成金鑰,並傳給hadoop001
ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub002
登入hadoop003節點生成金鑰,並傳給hadoop001
ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub003
登入hadoop004節點生成金鑰,並傳給hadoop001
ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub00
4
登入hadoop001節點,組合所有公鑰
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub002 >> authorized_keys
cat id_rsa.pub003 >> authorized_keys
cat id_rsa.pub004 >> authorized_keys
chmod 600 authorized_keys
注:要修改檔案許可權。
分發金鑰檔案:在hadoop001上操作
scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/
scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/
scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/
注:以上所有登陸節點、傳輸檔案過程都需要輸入對應節點lan使用者的登入金鑰。
到此,免密成功,所有節點可以相互之間免密登入。
測試ssh hadoop002
2.7 安裝jdk
注:因為大資料所有元件都是在JVM環境中執行,所以在安裝其他元件之前必須安裝首先JDK。
jdk版本推薦安裝1.8
上傳至伺服器lan使用者下:/home/lan
解壓, 將JDK檔案解壓,放到/usr/java目錄下,使用root使用者
mkdir /usr/java/
mv /home/lan/jdk-8u101-linux-x64.tar.gz /usr/java/
cd /usr/java/
tar -zxvf jdk-8u101-linux-x64.gz
配置環境變數,使用lan使用者
vim ~/.bash_profile
新增以下內容
export JAVA_HOME=/usr/java/jdk1.8.0_101
export PATH=$JAVA_HOME/bin:$PATH
生效配置檔案
source ~/.bash_profile
測試
java -version
其他節點同上
3 安裝其他元件
3.1 安裝zookeeper
注:以下所有安裝預設是在hadoop001上執行!
1.解壓並移動軟體包(在所有節點執行)
將zookeeper-3.4.6.tar.gz 解壓縮,
tar -zxvf zookeeper-3.4.6.tar.gz
2.修改配置檔案(在hadoop001執行)
修改Zookeeper配置檔案/home/lan/zookeeper-3.4.6/conf/zoo_sample.cfg重名為zoo.cfg。
進入到conf目錄下,執行:
mv zoo_sample.cfg zoo.cfg
修改zoo.cfg,新增如下內容
server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop004:2888:3888
3.建立相關目錄
建立/tmp/zookeeper目錄,並在此目錄下建立myid檔案。
mkdir /tmp/zookeeper
cd /tmp/zookeeper
vim myid
在檔案中寫入數字
1
4.分發zookeeper軟體包
scp -r /home/lan/zookeeper-3.4.6 [email protected]:~/
scp -r /home/lan/zookeeper-3.4.6 [email protected]:~/
5.修改myid檔案
ssh [email protected]
vim /tmp/zookeeper/myid
修改檔案中數字為2
2
ssh [email protected]
vim /tmp/zookeeper/myid
修改檔案中數字為3
3
注:重新登入終端環境變數生效。
6.啟動Zookeeper
在hadoop001,hadoop002,hadoop004上執行
bin/zkServer.sh start
檢視程序QuorumPeerMain是否啟動
jps
檢視zookeeper狀態
bin/zkServer.sh status
3.2 安裝hadoop
hadoop部分的配置分為兩部分hdfs和yarn。
3.2.1 HDFS
1.解壓並移動軟體包(在所有節點執行)
將/home/lan/hadoop-2.7.1.tar.gz解壓
tar -zxvf hadoop-2.7.1.tar.gz
2.修改配置檔案
修改core-site.xml(如果檔案不存在,但是core-site.xml.template檔案存在,則先修改檔名,執行mv core-site.xml.template core-site.xml)
vim /home/lan/hadoop-2.7.1/etc/hadoop/core-site.xml
修改為以下內容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://beh</value>
<final>false</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/lan/hadoopdata</value>
<final>false</final>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
<final>false</final>
</property>
</configuration>
修改hdfs-site.xml
vim /home/lan/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
修改為以下內容:
<configuration>
<property>
<name>dfs.nameservices</name>
<value>beh</value>
<final>false</final>
</property>
<property>
<name>dfs.ha.namenodes.beh</name>
<value>nn1,nn2</value>
<final>false</final>
</property>
<property>
<name>dfs.namenode.rpc-address.beh.nn1</name>
<value>hadoop001:9000</value>
<final>false</final>
</property>
<property>
<name>dfs.namenode.http-address.beh.nn1</name>
<value>hadoop001:50070</value>
<final>false</final>
</property>
<property>
<name>dfs.namenode.rpc-address.beh.nn2</name>
<value>hadoop002:9000</value>
<final>false</final>
</property>
<property>
<name>dfs.namenode.http-address.beh.nn2</name>
<value>hadoop002:50070</value>
<final>false</final>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop001:8485;hadoop002:8485;hadoop004:8485/beh</value>
<final>false</final>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.beh</name>
<value>true</value>
<final>false</final>
</property>
<property>
<name>dfs.client.failover.proxy.provider.beh</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<final>false</final>
</property>
<property>
<name>dfs.journalnode.edits .dir</name>
<value>/home/lan/metadata/journal</value>
<final>false</final>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<final>false</final>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/lan/.ssh/id_rsa</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<final>false</final>
</property>
<configuration>
修改slaves
vim /home/lan/hadoop-2.7.1/etc/hadoop/slaves
修改為以下內容:
hadoop003
hadoop004
3.2.2 YARN
修改mapred-site.xml
vim /home/lan/hadoop2.7.1/etc/hadoop/mapred-site.xml
修改為以下內容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop004:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop004:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/home/lan/metadata/hadoop-yarn/staging</value>
</property>
</configuration>
修改yarn-site.xml
vim /home/lan/hadoop2.7.1/etc/hadoop/yarn-site.xml
修改為以下內容:
<?xml version=”1.0” encoding=”UTF-8”?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/lan/metadata/yarn</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/lan/logs/yarn/userlogs</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<description>Where to aggregate logs</description>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://beh/var/log/hadoop-yarn/apps</value>
</property>
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>beh</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--RM1 RM2 is different-->
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
如果是namenode2機器上,需要將該部分的rm1修改為rm2
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property>
<!-- RM1 configs -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop001:23140</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop001:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>hadoop001:23189</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop001:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop001:23125</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>hadoop001:23141</value>
</property>
<!-- RM2 configs -->
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop002:23140</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop002:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>hadoop002:23189</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop002:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop002:23125</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>hadoop002:23141</value>
</property>
<!-- Node Manager Configs -->
<property>
<name>mapreduce.shuffle.port</name>
<value>23080</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
</property>
</configuration>
修改環境變數
vim /home/lan/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
vim /home/lan/hadoop-2.7.1/etc/hadoop/yarn-env.sh
修改為以下內容:
export JAVA_HOME=/usr/java/jdk1.8.0_101
3.2.3 分發配置檔案
scp -r /home/lan/hadoop2.7.1 [email protected]:~/
scp -r /home/lan/hadoop2.7.1 [email protected]:~/
scp -r /home/lan/hadoop2.7.1 [email protected]:~/
注:將以上配置複製到所有節點
3.2.4 啟動HDFS
啟動journalnode(程序名:JournalNode)
$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode
格式化zookeeper,在hadoop001上執行。
格式化之前需要確定,ZooKeeper必須已經啟動。
啟動Zookeeper: zkServer-sh start
hdfs zkfc -formatZK
對hadoop1節點進行格式化和啟動啟動namenode(程序名:NameNode):
hdfs namenode -format
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
對hadoop2節點進行格式化和啟動
hdfs namenode -bootstrapStandby
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
在hadoop1和hadoop2上啟動zkfc服務(zkfc服務程序名:DFSZKFailoverController):此時hadoop1和hadoop2就會有一個節點變為active狀態
$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
啟動datanode(程序名:DataNode):在hadoop1上執行
$HADOOP_HOME/sbin/hadoop-daemons.sh start datanode
3.2.5 驗證是否成功
開啟瀏覽器,訪問 hadoop1:50070 以及 hadoop2:50070,你將會看到兩個namenode一個是active而另一個是standby。
然後kill掉其中active的namenode程序,另一個standby的naemnode將會自動轉換為active狀態
hadoop001:50070
hadoop002:50070
3.2.6 啟動yarn
在hadoop1上啟動
(此指令碼將會啟動hadoop1上的resourcemanager及所有的nodemanager)
$HADOOP_HOME/sbin/start-yarn.sh
在hadoop2上啟動resourcemanagerl
$HADOOP_HOME/sbin/yarn-daemon.sh start resourcemanager
3.2.7 驗證是否配置成功
開啟瀏覽器,訪問hadoop1:23188或者hadoop2:23188,只有active的會開啟如下介面,standby的那個不會看到頁面。
然後kill掉active的resourcemanager另一個將會變為active的,說明resourcemanager HA是成功的