部署 徹底分佈式高可用 Hadoop hdfs HA + yarn HA

部署 徹底分佈式高可用 Hadoop hdfs HA + yarn HA

標籤(空格分隔): 大數據運維專欄java


  • 一:hadoop HDFS HA 與 yarn HA 的 概述
  • 二:部署環境概述
  • 三:部署zookeeper
  • 四:部署HDFS HA 與 yarn HA
  • 五:關於 HA 的測試

一:hadoop HDFS HA 與 yarn HA 的 概述

1.1 HA 的概述

HA概述

    1)所謂HA(High Available),即高可用(7*24小時不中斷服務)。
    2)實現高可用最關鍵的策略是消除單點故障。HA嚴格來講應該分紅各個組件的HA機制:HDFS的HA和YARN的HA。
    3)Hadoop2.0以前,在HDFS集羣中NameNode存在單點故障(SPOF)。
    4)NameNode主要在如下兩個方面影響HDFS集羣: 
        NameNode機器發生意外,如宕機,集羣將沒法使用,直到管理員重啓。
        NameNode機器須要升級,包括軟件、硬件升級,此時集羣也將沒法使用。
    HDFS HA功能經過配置Active/Standby兩個NameNodes實如今集羣中對NameNode的熱備來解決上述問題。若是出現故障,如機器崩潰或機器須要升級維護,這時可經過此種方式將NameNode很快的切換到另一臺機器。

1.2 HDFS-HA 的工做機制

HDFS-HA工做機制

經過雙NameNode消除單點故障。

 HDFS-HA工做要點
    一、元數據管理方式須要改變
    內存中各自保存一份元數據;
    Edits日誌只有Active狀態的NameNode節點能夠作寫操做;
    兩個NameNode均可以讀取Edits;
    共享的Edits放在一個共享存儲中管理(qjournal和NFS兩個主流實現)。
    二、須要一個狀態管理功能模塊
    實現了一個zkfailover,常駐在每個namenode所在的節點,每個zkfailover負責監控本身所在NameNode節點,利用zk進行狀態標識,當須要進行狀態切換時,由zkfailover來負責切換,切換時須要防止brain split(腦裂)現象的發生。
    三、必須保證兩個NameNode之間可以ssh無密碼登陸。
    四、隔離(Fence),即同一時刻僅僅有一個NameNode對外提供服務。

1.3 HDFS-HA手動故障轉移工做機制

圖片.png-262.7kB


1.4 HDFS-HA自動故障轉移工做機制

圖片.png-288.6kB

二: 部署環境概述

2.1:所需安裝配置包

1. 系統:CentOS 7.5 X64
2. 軟件:Hadoop-3.2.1.tar.gz 
      apache-zookeeper-3.6.1-bin.tar.gz
      jdk-8u181-linux-x64.rpm
將全部軟件安裝上傳到/software下面

3. 系統關閉SELINUX 與清空iptables 防火牆規則

4. 系統配置好 時間同步服務器
         ntp1.aliyun.com

圖片.png-16.1kB

圖片.png-19.3kB

圖片.png-25.2kB

三:部署zookeeper

fat01.flyfish.com 節點操做

tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz

mv apache-zookeeper-3.6.1-bin /opt/bigdata/zookeeper

cd /opt/bigdata/zookeeper/conf

cp -p zoo_sample.cfg zoo.cfg

vim zoo.cfg

-----

dataDir=/opt/bigdata/zookeeper/data/

server.1=fat01.flyfish.com:2888:3888
server.2=fat02.flyfish.com:2888:3888
server.3=fat03.flyfish.com:2888:3888
----

mkdir -p /opt/bigdata/zookeeper/data/
echo "1" > /opt/bigdata/zookeeper/data/myid 

打包zookeeper 目錄

cd /opt/bigdata/
tar -zcvf zookeeper.tar.gz zookeeper

scp zookeeper.tar.gz  root@192.168.11.195:/opt/bigdata/
scp zookeeper.tar.gz  root@192.168.11.197:/opt/bigdata/

fat02.flyfish.com 節點操做

cd /opt/bigdata/
tar -zxvf  zookeeper.tar.gz 

echo 2 > /opt/bigdata/zookeeper/data/myid

fat03.flyfish.com 節點操做

cd /opt/bigdata/
tar -zxvf zookeeper.tar.gz 

echo 3 > /opt/bigdata/zookeeper/data/myid

啓動全部節點的zookeeper

cd /opt/bigdata/zookeeper/bin
./zkstart.sh

圖片.png-37.7kB

圖片.png-31.4kB

圖片.png-12.9kB


四:部署HDFS HA 與 yarn HA

4.1 部署解壓Hadoop

tar –zxvf hadoop-3.2.1.tar.gz 
    mv hadoop-3.2.1 /opt/bigdata/hadoop/

4.2 編輯Hadoop-env.sh 配置文件

vim hadoop-env.sh
---
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export HADOOP_PID_DIR=/opt/bigdata/hadoop/data/tmp
export HADOOP_SECURE_DN_PID_DIR=/opt/bigdata/hadoop/data/tmp
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_ZKFC_USER="root"
export HDFS_JOURNALNODE_USER="root"
----

圖片.png-12.7kB

vim mapred-env.sh
增長jdk 的環境

export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export HADOOP_MAPRED_PID_DIR=/opt/bigdata/hadoop/data/tmp

-----

vim yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

圖片.png-6.7kB

圖片.png-5.8kB

4.3 編輯core-site.xml 文件

cd /opt/bigdata/hadoop/etc/hadoop

vim core-site.xml 

---
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://myNameService1</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/opt/bigdata/hadoop/data/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>

        <!-- 指定zookeeper地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>fat01.flyfish.com:2181,fat02.flyfish.com:2181,fat03.flyfish.com:2181</value>
        </property>

</configuration>
----

4.4 編輯 hdfs-site.xml

vim hdfs-site.xml
----
<configuration>

        <!--指定hdfs的nameservice爲myNameService1,須要和core-site.xml中的保持一致 -->
        <property>
                <name>dfs.nameservices</name>
                <value>myNameService1</value>
        </property>

        <!-- myNameService1下面有兩個NameNode,分別是nn1,nn2 -->
        <property>
                <name>dfs.ha.namenodes.myNameService1</name>
                <value>nn1,nn2</value>
        </property>

        <!-- nn1的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.myNameService1.nn1</name>
                <value>fat01.flyfish.com:9000</value>
        </property>

        <!-- nn1的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.myNameService1.nn1</name>
                <value>fat01.flyfish.com:50070</value>
        </property>

        <!-- nn2的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.myNameService1.nn2</name>
                <value>fat02.flyfish.com:9000</value>
        </property>

        <!-- nn2的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.myNameService1.nn2</name>
                <value>fat02.flyfish.com:50070</value>
        </property>

        <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://fat01.flyfish.com:8485;fat02.flyfish.com:8485;fat03.flyfish.com:8485/myNameService1</value>
        </property>

        <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/bigdata/hadoop/data/jn</value>
        </property>

        <!-- 開啓NameNode失敗自動切換 -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>

        <!-- 配置失敗自動切換實現方式 -->
        <property>
                <name>dfs.client.failover.proxy.provider.myNameService1</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>

        <!-- 配置隔離機制方法,Failover後防止停掉的Namenode啓動,形成兩個服務,多個機制用換行分割,即每一個機制暫用一行-->
        <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>/root/.ssh/id_rsa</value>
        </property>

        <!-- 配置sshfence隔離機制超時時間 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>

        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/opt/bigdata/hadoop/data/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/opt/bigdata/hadoop/tmp/dfs/data</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>

</configuration>
-----

4.5 編輯 yarn-site.xml

vim yarn-site.xml
----
<configuration>

<!-- Site specific YARN configuration properties -->

        <!-- 開啓RM高可用 -->
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>

        <!-- 指定RM的cluster 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>fat01.flyfish.com</value>
        </property>

        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>fat02.flyfish.com</value>
        </property>

        <!-- RM對外暴露的web http地址,用戶可經過該地址在瀏覽器中查看集羣信息 -->
        <property>
                <name>yarn.resourcemanager.webapp.address.rm1</name>
                <value>fat01.flyfish.com:8088</value>
        </property>

        <property>
                <name>yarn.resourcemanager.webapp.address.rm2</name>
                <value>fat02.flyfish.com:8088</value>
        </property>

        <!-- 指定zookeeper集羣地址 -->
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>fat01.flyfish.com:2181,fat02.flyfish.com:2181,fat03.flyfish.com:2181</value>
        </property>

        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <property>
                <name>yarn.application.classpath</name>
                <value>/opt/bigdata/hadoop/etc/hadoop:/opt/bigdata/hadoop/share/hadoop/common/lib/*:/opt/bigdata/hadoop/share/hadoop/common/*:/opt/bigdata/hadoop/share/hadoop/hdfs:/opt/bigdata/hadoop/share/hadoop/hdfs/lib/*:/opt/bigdata/hadoop/share/hadoop/hdfs/*:/opt/bigdata/hadoop/share/hadoop/mapreduce/lib/*:/opt/bigdata/hadoop/share/hadoop/mapreduce/*:/opt/bigdata/hadoop/share/hadoop/yarn:/opt/bigdata/hadoop/share/hadoop/yarn/lib/*:/opt/bigdata/hadoop/share/hadoop/yarn/*</value>
        </property>

</configuration>

-----

4.5 編輯 mapred-site.xml

vim mapred-site.xml 
-----
<configuration>

        <!-- 指定mr框架爲yarn方式 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

        <!-- 配置 MapReduce JobHistory Server 地址 ,默認端口10020 -->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>fat01.flyfish.com:10020</value>
        </property>

        <!-- 配置 MapReduce JobHistory Server web ui 地址, 默認端口19888 -->
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>fat01.flyfish.com:19888</value>
        </property>

        <property>
                <name>mapreduce.application.classpath</name>
                <value>/opt/bigdata/hadoop/share/hadoop/mapreduce/*,/opt/bigdata/hadoop/share/hadoop/mapreduce/lib/*</value>
        </property>

</configuration>
-----

4.6 修改works 文件

fat01.flyfish.com
fat02.flyfish.com
fat03.flyfish.com

4.8 打包 同步全部節點

fat01.flyfish.com 節點:

cd /opt/bigdata/

tar -zcvf hadoop.tar.gz hadoop
scp hadoop.tar.gz root@192.168.11.195:/opt/bigdata/
scp hadoop.tar.gz root@192.168.11.197:/opt/bigdata/

fat02.flyfish.com 節點:

 cd /opt/bigdata/

 tar -zxvf hadoop.tar.gz 

fat03.flyfish.com 節點操做

cd /opt/bigdata/

tar -zxvf hadoop.tar.gz

4.9 啓動全部節點的journalnode服務

cd /opt/bigdata/hadoop/
sbin/hadoop-daemon.sh start journalnode

圖片.png-32.6kB

圖片.png-16.1kB

圖片.png-26.8kB

4.10 啓動namenode 節點的HDFS

格式化hdfs

hdfs namenode -format

圖片.png-91.4kB

圖片.png-50.3kB

將fat01.flyfish.com上生成的data文件夾複製到fat02.flyfish.com的相同目錄下
cd /opt/bigdata/hadoop/

scp -r data/  root@192.168.11.195:/opt/bigdata/hadoop/

啓動namenode 

hdfs --daemon start namenode

圖片.png-22.1kB


fat02.flyfish.com

執行 備用節點:

hdfs namenode -bootstrapStandby

hdfs --daemon start namenode

圖片.png-57.1kB

4.11格式化ZK 在fat01.flyfish.com上面執行

cd /opt/bigdata/hadoop/bin
      ./hdfs zkfc –formatZK

圖片.png-84.6kB


4.12 停掉/啓動 hdfs 的全部 服務

cd /opt/bigdata/hadoop/sbin/

./stop-dfs.sh 

./start-dfs.sh

圖片.png-41.7kB

圖片.png-38.9kB

打開hdfs 的web頁面

圖片.png-65kB

圖片.png-69.9kB

圖片.png-68.7kB

圖片.png-68.6kB

4.12 啓動yarn

cd /opt/bigdata/hadoop/
sbin/start-yarn.sh 啓動 yarn 
sbin/stop-yarn.sh  停掉 yarn

圖片.png-24.8kB

圖片.png-14.1kB

圖片.png-12.3kB

圖片.png-91.1kB

啓動日誌聚合功能:
cd /opt/bigdata/hadoop/sbin/

 ./mr-jobhistory-daemon.sh start historyserver

圖片.png-80.2kB


五:關於 HA 的測試

5.1 hdfs HA 測試

當前節點fat02.flyfish.com 的hdfs 是active 狀態 
把 fat02.flyfish.com 的 NN 服務停掉

jps 

kill -9 94030

fat01.flyfish.com 上的 NN 節點立馬變爲 active 狀態

圖片.png-19.8kB

圖片.png-71.4kB


而後啓動fat02.flyfish.com 的NN 節點

hdfs --daemon start namenode

fat02.flyfish.com 上面的NN 變爲standby

圖片.png-17.8kB

圖片.png-61.4kB


5.2 yarn 的HA 測試

提交一個job

hdfs dfs -mkdir /input 

hdfs dfs -put word.txt /input 
cd /opt/bigdata/hadoop/

bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output1

圖片.png-51.3kB

圖片.png-43.4kB

圖片.png-102.6kB

相關文章
相關標籤/搜索