Hadoop - 集羣安裝已經介紹瞭如何安裝一個Hadoop集羣,可是這個集羣的NameNode出現故障,那這個集羣是不能夠用的。咱們須要藉助zookeeper來安裝一個高可用集羣,當於Active狀態的NameNode發生故障,還有Standby狀態的NameNode及時切換,成爲Active狀態的NameNode對外提供服務。
zookeeper集羣見以前的,這裏的配置是bigdata0一、bigdata0二、bigdata03是zookeeper節點,bigdata04做爲集羣的observer角色。
其餘步驟跟以前的集羣安裝同樣,區別是幾個配置文件的修改。node
這裏配置2個namenode的相關信息。web
<configuration> <!-- 指定副本數 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--定義nameservice的名稱爲hadoopdajun--> <property> <name>dfs.nameservices</name> <value>hadoopdajun</value> </property> <!-- 定義hadoopdajun兩個NameNode的名稱:nn1,nn2 --> <property> <name>dfs.ha.namenodes.hadoopdajun</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址,rpc用來和datanode通信 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn1</name> <value>bigdata01:9000</value> </property> <!-- nn1的http通訊地址,用於web客戶端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn1</name> <value>bigdata01:50070</value> </property> <!-- nn2的RPC通訊地址,rpc用來和datanode通信 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn2</name> <value>bigdata02:9000</value> </property> <!-- nn2的http通訊地址,用於web客戶端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn2</name> <value>bigdata02:50070</value> </property> <!-- edits元數據的共享存儲位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://bigdata01:8485;bigdata02:8485;bigdata03:8485/hadoopdajun</value> </property> <!-- 本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/bigdata/data/journaldata</value> </property> <!-- 開啓NameNode失敗自動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗自動切換的代理類 --> <property> <name>dfs.client.failover.proxy.provider.hadoopdajun</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制暫用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔離機制時須要ssh免登錄 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/bigdata/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
這裏配置zookeeper的相關信息,而且fs.defaultFS配置的是nameservice的名稱,而不是以前的地址。shell
<configuration> <!-- hdfs-site.xm中配置的nameservice --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoopdajun/</value> </property> <!-- 指定hadoop工做目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/home/bigdata/data/hadoopdata/</value> </property> <!-- 指定zookeeper集羣訪問地址 --> <property> <name>ha.zookeeper.quorum</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property>
爲yarn配置zookeeper信息。apache
<configuration> <!-- Site specific YARN configuration properties --> <!-- 開啓高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarndajun</value> </property> <!-- 指定RM的兩個節點 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 指定兩個節點的位置 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>bigdata03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>bigdata04</value> </property> <!-- 指定zk集羣地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property> <!-- 要運行MapReduce程序必須配置的附屬服務 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 開啓YARN集羣的日誌聚合功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- YARN集羣的聚合日誌最長保留時長 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 啓用自動恢復 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定resourcemanager的狀態信息存儲在zookeeper集羣上--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>
這個跟以前就多了歷史服務器信息。segmentfault
<configuration> <!-- 執行框架設置爲Hadoop YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 設置mapreduce的歷史服務器地址和端口號 --> <property> <name>mapreduce.jobhistory.address</name> <value>bigdata04:10020</value> </property> <!-- mapreduce歷史服務器的web訪問地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata04:19888</value> </property> </configuration>
啓動journalnode,在bigdata0一、bigdata0二、bigdata03執行:服務器
hadoop-daemon.sh start journalnode
在bigdata01格式化namenode:app
hadoop namenode -format
生成/home/bigdata/data/hadoopdata發送到bigdata02服務器。
zookeeper元數據初始化:框架
hdfs zkfc -formatZK
啓動hdfs集羣和yarn集羣,hdfs啓動在任意節點,yarn啓動分佈在bigdata0三、bigdata04更執行一次。ssh
start-dfs.sh start-yarn.sh
http://bigdata01:50070 界面:
http://bigdata02:50070 界面:
能夠看到,bigdata01是active狀態,bigdata02是standby狀態。若是把bigdata01的進程殺死,那bigdata02自動會變成active狀態。
http://bigdata03:8088/ 界面和http://bigdata04:8088/ 界面是同樣的,我這裏bigdata04是主節點,若是訪問bigdata03會自動調到bigdata04界面。webapp
安裝這個HA集羣,相比以前費了很多力,也從新安裝了不少次,/home/bigdata/data/的hadoopdata、journaldata、zkdata文件夾甚至bigdata0二、bigdata0三、bigdata04的haddoop文件夾也刪除了幾回。有寫多是配置文件沒寫好,有寫多是以前的遺留數據,有寫是zk服務問題等。