HA 即 High Available 高可用。node
# 其做用是爲了減小主從結構的單點故障,而設置備用節點,既然學習了Hadoop生態圈,那麼HA配置也是必需要掌握的。linux
# 由於生產環境中,必定會設置HA,減小故障率。shell
# 參考了好幾處的教程,本身動手實踐了下,成功。apache
# 會有一些配置文件須要修改,若是嫌vim麻煩,能夠將文件下載到windows,改好後再傳回去。vim
# 本次軟件版本: CentOS 6.5 x64 jdk-8u161-linux-x64.tar.gz zookeeper-3.4.5.tar.gz hadoop-2.7.5.tar.gzwindows
分享以前我仍是要推薦下我本身建立的大數據學習交流Qun531629188瀏覽器
不管是大牛仍是想轉行想學習的大學生網絡
小編我都挺歡迎,今天的已經資訊上傳到羣文件,不按期分享乾貨,ssh
包括我本身整理的一份最新的適合2018年學習的大數據教程,歡迎初學和進階中的小夥伴。ide
1、集羣的規劃 四臺VM12
Zookeeper集羣:
192.168.112.10 master
192.168.112.11 slave1
192.168.112.12 slave2
Hadoop集羣:
192.168.112.10 master NameNode1 ResourceManager1 Journalnode
192.168.112.11 slave1 NameNode2 ResourceManager2 Journalnode
192.168.112.12 slave2 DataNode1
192.168.112.13 slave3 DataNode2
2、準備工做
一、安裝JDK
二、配置環境變量
三、配置免密碼登陸
四、配置主機名、網絡、關閉防火牆 ...
3、配置Zookeeper(在192.168.112.10 master 安裝)
在主節點(master)上配置ZooKeeper
(*)配置/usr/local/src/zookeeper/conf/zoo.cfg文件
dataDir=/usr/local/src/zookeeper/zkdataclientPort=2181server.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:3888
(*)在/usr/local/src/zookeeper/zkdata目錄下建立一個myid的空文件
echo 1 > myid
(*)將配置好的zookeeper拷貝到其餘節點,同時修改各自的myid文件
scp -r /usr/local/src/zookeeper slave1:/usr/local/srcscp -r /usr/local/src/zookeeper slave2:/usr/local/src
4、安裝Hadoop集羣(在 master 上安裝)
一、修改hadoo-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_161
二、修改core-site.xml
<configuration><!-- 指定hdfs的nameservice爲 names1 --><property><name>fs.defaultFS</name><value>hdfs://names1</value></property><!-- 指定hadoop臨時目錄 --><property><name>hadoop.tmp.dir</name><value>/usr/local/src/hadoop-2.7.5/tmp</value></property><!-- 指定zookeeper地址 --><property><name>ha.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property></configuration>
三、修改hdfs-site.xml(配置這個nameservice中有幾個namenode)
<configuration> <!-- 指定hdfs的nameservice爲 names1 ,須要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>names1</value></property><!-- names1下面有兩個NameNode,分別是nn1,nn2 --><property><name>dfs.ha.namenodes.names1</name><value>nn1,nn2</value></property><!-- nn1的RPC通訊地址 --><property><name>dfs.namenode.rpc-address.names1.nn1</name><value>master:9000</value></property><!-- nn1的http通訊地址 --><property><name>dfs.namenode.http-address.names1.nn1</name><value>master:50070</value></property><!-- nn2的RPC通訊地址 --><property><name>dfs.namenode.rpc-address.names1.nn2</name><value>slave1:9000</value></property><!-- nn2的http通訊地址 --><property><name>dfs.namenode.http-address.names1.nn2</name><value>slave1:50070</value></property><!-- 指定NameNode的日誌在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://master:8485;slave1:8485;/names1</value></property><!-- 指定JournalNode在本地磁盤存放數據的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/usr/local/src/hadoop-2.7.5/journal</value></property><!-- 開啓NameNode失敗自動切換 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失敗自動切換實現方式 --><property><name>dfs.client.failover.proxy.provider.names1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制暫用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用sshfence隔離機制時須要ssh免登錄 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 配置sshfence隔離機制超時時間 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property></configuration>
cd /usr/local/src/hadoop-2.7.5/mkdir journalchmod 777 journal
四、修改mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
五、修改yarn-site.xml
<configuration><!-- 開啓RM高可靠 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster,不能與nameservices相同 id --><property><name>yarn.resourcemanager.cluster-id</name><value>yrc</value></property><!-- 指定RM的名字 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!-- 分別指定RM的地址 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>master</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>slave1</value></property><!-- 指定zk集羣地址 --><property><name>yarn.resourcemanager.zk-address</name><value>master:2181,slave1:2181,slave2:2181</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>
六、修改slaves
bigdata14bigdata15
七、將配置好的hadoop拷貝到其餘節點
scp -r /usr/local/src/hadoop-2.7.5/ root@slave1:/usr/local/src/ scp -r /usr/local/src/hadoop-2.7.5/ root@slave2:/usr/local/src/ scp -r /usr/local/src/hadoop-2.7.5/ root@slave3:/usr/local/src/
5、啓動Zookeeper集羣
每臺上面 zkServer.sh start
6、在master和slave1上啓動journalnode
hadoop-daemon.sh start journalnode
7、格式化HDFS(在 master 上執行)
1. hdfs namenode -format
2. 將/usr/local/src/hadoop-2.7.5/tmp拷貝到slave1的/usr/local/src/hadoop-2.7.5/tmp下
3. 格式化zookeeper
hdfs zkfc -formatZK# 日誌:18/04/11 22:34:33 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/names1 in ZK.
8、在master上啓動Hadoop集羣
start-all.sh
# 日誌:
Starting namenodes on [master slave1]
slave1: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-slave1.out
master: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-master.out
slave3: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave3.out
slave2: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave2.out
slave1上的ResourceManager須要單獨啓動
yarn-daemon.sh start resourcemanager
9、驗證與檢查
jps查看每臺的進程:(這裏沒顯示Jps進程)
master: 3745 QuorumPeerMain 3812 JournalNode 4484 ResourceManager 4070 NameNode 4377 DFSZKFailoverControllerslave1: 3809 ResourceManager 3602 NameNode 3522 JournalNode 3715 DFSZKFailoverController 3455 QuorumPeerMainslave2: 19316 NodeManager 19207 DataNode 19118 QuorumPeerMainslave3: 3530 DataNode 3630 NodeManager
分別訪問:http://master:50070 和 http://slave1:50070 能夠看到一個是active, 另外一個是standby 而Namespace均顯示爲names1
分別訪問:http://master:8088 和 http://slave1:8088 其中slave1將自動跳轉到master,注意看瀏覽器URL的變化。Nodes中能夠看到DataNode
模擬宕機:master 上執行 kill -9 4070 後,馬上刷新http://slave1:50070 會發現變在了active
而後再從新啓動宕掉的master進程: sbin/hadoop-daemon.sh start namenode 啓動成功後,master會變爲standby狀態。
10、中止服務
好了,我要關掉VM了,因此要先停掉這些服務。
master上 stop-all.sh
slave1上 stop-all.sh 由於剛纔有個RM是單獨啓動的,因此也須要單獨來中止。
在每臺zk上zkServer.sh stop