大數據第六課-Hadoop高可用(HA)集羣安裝

1、備份之前的全分佈式集羣

備份全分佈式集羣,複製一份node

 2、安裝Zookeeper(三臺機器)

一、下載zookeeper

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

四、添加myid配置

在第一臺機器的/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

3、修改hadoop配置

主要修改四個文件: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>

4、初始化啓動操做

一、在三臺機器上啓動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

七、關閉集羣而後重啓就行了。

5、一些有用的腳本

一、一鍵啓動全部服務的腳本

先建立一個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

三、兩個腳本的使用

 四、在web界面查看效果

a、http://node01:50070/

b、http://node02:50070/

c、http://node02:8088/

d、http://node03:19888/

五、經過命令查看namenode狀態 (後增長的,因此結果和前的截圖不一致)

 經過瀏覽器雖然能夠查看HDFS的NameNode的狀態,若是感受不方便,能夠直接使用命令來查看(前提是HDFS已經啓動):

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

相關文章
相關標籤/搜索