經過瀏覽器雖然能夠查看HDFS的NameNode的狀態,若是感受不方便,能夠直接使用命令來查看(前提是HDFS已經啓動):
備份全分佈式集羣,複製一份node
http://archive.cloudera.com/cdh5/cdh/5/web
咱們在這個網址下載咱們使用的zk版本爲zookeeper-3.4.5-cdh5.14.2.tar.gzapache
下載完成以後,上傳到node01的/kkb/soft路徑下準備進行安裝。bootstrap
node01執行如下命令解壓zookeeper的壓縮包到node01服務器的/kkb/install路徑下去vim
cd /kkb/soft tar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz -C /kkb/install/
進入文件瀏覽器
cd /kkb/install/zookeeper-3.4.5-cdh5.14.2/conf cp zoo_sample.cfg zoo.cfg mkdir -p /kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas vim zoo.cfg
修改配置bash
dataDir=/kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
在第一臺機器的/kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/服務器
這個路徑下建立一個文件,文件名爲myid ,文件內容爲1app
echo 1 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid
第一臺機器上面執行如下兩個命令
scp -r /kkb/install/zookeeper-3.4.5-cdh5.14.2/ node02:/kkb/install/
scp -r /kkb/install/zookeeper-3.4.5-cdh5.14.2/ node03:/kkb/install/
第二臺機器上修改myid的值爲2
直接在第二臺機器任意路徑執行如下命令
echo 2 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/myid
第三臺機器上修改myid的值爲3
直接在第三臺機器任意路徑執行如下命令
echo 3 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/myid
export ZOOKEEPER_HOME=/kkb/install/zookeeper-3.4.5-cdh5.14.2
export PATH=$ZOOKEEPER_HOME/bin:$PATH
最後 source /etc/profilessh
主要修改四個文件:core-site.xml, hdfs-site.xml ,mapred-site.xml , yarn-site.xml
一、修改core-site.xml
<!--指定zookeeper的地址--> <property> <name>ha.zookeeper.quorum</name> <value>node01:2181,node02:2181,node03:2181</value> </property> <!--指定namenode的nameservice名爲hann--> <property> <name>fs.defaultFS</name> <value>hdfs://hann</value> </property> <!-- 指定hadoop臨時目錄,這個要手動建立目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas</value> </property>
二、修改hdfs-site.xml
<!--指定hdfs的nameservice爲hann,須要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>hann</value> </property> <!-- hann下面有兩個NameNode,分別是nn1,nn2 --> <property> <name>dfs.ha.namenodes.hann</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.hann.nn1</name> <value>node01:8020</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.hann.nn2</name> <value>node02:8020</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.hann.nn1</name> <value>node01:50070</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.hann.nn2</name> <value>node02:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/hann</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/jn</value> </property> <!-- 開啓NameNode失敗自動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗自動切換實現方式 --> <property> <name>dfs.client.failover.proxy.provider.hann</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制佔用一行--> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用sshfence隔離機制時須要ssh免登錄 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!--文件在HDFS中的備份數(小於等於namenode的數量)--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--關閉HDFS的訪問權限--> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- 配置sshfence隔離機制超時時間(這個是網上看到的一個配置,培訓機構沒給) --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property>
三、修改mapred-site.xml
<!--指定運行mapreduce的環境是yarn --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- MapReduce JobHistory Server IPC host:port --> <property> <name>mapreduce.jobhistory.address</name> <value>node03:10020</value> </property> <!-- MapReduce JobHistory Server Web UI host:port --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node03:19888</value> </property>
四、修改 yarn-site.xml
<!--開啓resource manager HA,默認爲false--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 集羣的Id,使用該值確保RM不會作爲其它集羣的active --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>mycluster</value> </property> <!--配置resource manager 命名--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 配置第一臺機器的resourceManager --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node03</value> </property> <!-- 配置第二臺機器的resourceManager --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node02</value> </property> <!-- 指定zk集羣地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>node01:2181,node02:2181,node03:2181</value> <description>For multiple zk services, separate them with comma</description> </property> <!--開啓resourcemanager自動恢復功能--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 設置存儲yarn中狀態信息的地方,默認爲hdfs,這裏設置爲zookeeper--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!-- 使在yarn上可以運行mapreduce_shuffle程序--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
一、在三臺機器上啓動JournalNode
hadoop-daemon.sh start journalnode
二、在第一個NameNode上進行格式化
hadoop namenode -format
三、在第一個NameNode上啓動NameNode
hadoop-daemon.sh start namenode
四、第二個namenode同步第一個namenode
hdfs namenode -bootstrapStandby
五、啓動第二個namenode
hadoop-daemon.sh start namenode
六、啓動zookeeper集羣,並進行格式化
在三臺機器上執行
zkServer.sh start
而後在node01上執行
hdfs zkfc -formatZK
七、關閉集羣而後重啓就行了。
先建立一個bin目錄,添加hadoopHA.sh的文件
cd
mkdir bin
cd bin
vim hadoopHA.sh
而後添加如下內容
#!/bin/bash case $1 in "start" ){ ssh node01 "source /etc/profile;start-dfs.sh" ssh node02 "source /etc/profile;start-yarn.sh" ssh node03 "source /etc/profile;mr-jobhistory-daemon.sh start historyserver" };; "stop"){ ssh node01 "source /etc/profile;stop-dfs.sh" ssh node02 "source /etc/profile;stop-yarn.sh" ssh node03 "source /etc/profile;mr-jobhistory-daemon.sh stop historyserver" };; esac
而後更改文件的權限
chmod 777 hadoopHA.sh
在bin目錄下穿件xcall.sh文件
vim xcall.sh
添加如下內容
#!/bin/bash params=$@ i=201 for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do echo ============= node0$i $params ============= ssh node0$i "source /etc/profile;$params" done
而後更改權限 chmod777 xcall.sh
經過瀏覽器雖然能夠查看HDFS的NameNode的狀態,若是感受不方便,能夠直接使用命令來查看(前提是HDFS已經啓動):
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2