1. 程式人生 > >Hadoop框架:HDFS高可用環境配置

Hadoop框架:HDFS高可用環境配置

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent) # 一、HDFS高可用 ## 1、基礎描述 在單點或者少數節點故障的情況下,叢集還可以正常的提供服務,HDFS高可用機制可以通過配置Active/Standby兩個NameNodes節點實現在叢集中對NameNode的熱備來消除單節點故障問題,如果單個節點出現故障,可通過該方式將NameNode快速切換到另外一個節點上。 ## 2、機制詳解 ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223001383-671579148.png) - 基於兩個NameNode做高可用,依賴共享Edits檔案和Zookeeper叢集; - 每個NameNode節點配置一個ZKfailover程序,負責監控所在NameNode節點狀態; - NameNode與ZooKeeper叢集維護一個持久會話; - 如果Active節點故障停機,ZooKeeper通知Standby狀態的NameNode節點; - 在ZKfailover程序檢測並確認故障節點無法工作後; - ZKfailover通知Standby狀態的NameNode節點切換為Active狀態繼續服務; ZooKeeper在大資料體系中非常重要,協調不同元件的工作,維護並傳遞資料,例如上述高可用下自動故障轉移就依賴於ZooKeeper元件。 # 二、HDFS高可用 ## 1、整體配置 |服務列表 | HDFS檔案 | YARN排程 | 單服務 | 共享檔案 | Zk叢集 | |---|---|---|---|---|---| |hop01 | DataNode | NodeManager | NameNode | JournalNode | ZK-hop01 | |hop02 | DataNode | NodeManager | ResourceManager | JournalNode | ZK-hop02 | |hop03 | DataNode | NodeManager | SecondaryNameNode | JournalNode | ZK-hop03 | ## 2、配置JournalNode **建立目錄** ``` [root@hop01 opt]# mkdir hopHA ``` **拷貝Hadoop目錄** ``` cp -r /opt/hadoop2.7/ /opt/hopHA/ ``` **配置core-site.xml** ```xml ``` **配置hdfs-site.xml**,新增內容如下 ```xml ``` **依次啟動journalnode服務** ``` [root@hop01 hadoop2.7]# pwd /opt/hopHA/hadoop2.7 [root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start journalnode ``` **刪除hopHA下資料** ``` [root@hop01 hadoop2.7]# rm -rf data/ logs/ ``` **NN1格式化並啟動NameNode** ``` [root@hop01 hadoop2.7]# pwd /opt/hopHA/hadoop2.7 bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode ``` **NN2同步NN1資料** ``` [root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby ``` **NN2啟動NameNode** ``` [root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode ``` **檢視當前狀態** ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223019522-132449956.png) **在NN1上啟動全部DataNode** ``` [root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode ``` **NN1切換為Active狀態** ``` [root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1 [root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active ``` ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223034607-884135953.png) ## 3、故障轉移配置 *配置hdfs-site.xml*,新增內容如下,同步叢集 ```xml ``` **配置core-site.xml**,新增內容如下,同步叢集 ```xml ``` **關閉全部HDFS服務** ``` [root@hop01 hadoop2.7]# sbin/stop-dfs.sh ``` **啟動Zookeeper叢集** ``` /opt/zookeeper3.4/bin/zkServer.sh start ``` **hop01初始化HA在Zookeeper中狀態** ``` [root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZK ``` **hop01啟動HDFS服務** ``` [root@hop01 hadoop2.7]# sbin/start-dfs.sh ``` **NameNode節點啟動ZKFailover** 這裡hop01和hop02先啟動的服務狀態就是Active,這裡先啟動hop02。 ``` [hadoop2.7]# sbin/hadoop-daemon.sh start zkfc ``` ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223050340-623807402.png) **結束hop02的NameNode程序** ``` kill -9 14422 ``` **等待一下檢視hop01狀態** ``` [root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active ``` # 三、YARN高可用 ## 1、基礎描述 ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223103749-592046830.png) 基本流程和思路與HDFS機制類似,依賴Zookeeper叢集,當Active節點故障時,Standby節點會切換為Active狀態持續服務。 ## 2、配置詳解 環境同樣基於hop01和hop02來演示。 **配置yarn-site.xml**,同步叢集下服務 ```xml ``` **重啟journalnode節點** ``` sbin/hadoop-daemon.sh start journalnode ``` **在NN1服務格式化並啟動** ``` [root@hop01 hadoop2.7]# bin/hdfs namenode -format [root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start namenode ``` **NN2上同步NN1元資料** ``` [root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby ``` **啟動叢集下DataNode** ``` [root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode ``` **NN1設定為Active狀態** 先啟動hop01即可,然後啟動hop02。 ``` [root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfc ``` **hop01啟動yarn** ``` [root@hop01 hadoop2.7]# sbin/start-yarn.sh ``` **hop02啟動ResourceManager** ``` [root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager ``` **檢視狀態** ``` [root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1 ``` ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201027223121244-1313008439.png) # 四、原始碼地址 ``` GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent ``` **推薦閱讀:程式設計體系整理** |序號|專案名稱|GitHub地址|GitEE地址|推薦指數| |:---|:---|:---|:---|:---| |01|Java描述設計模式,演算法,資料結構|[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆| |02|Java基礎、併發、面向物件、Web開發|[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆| |03|SpringCloud微服務基礎元件案例詳解|[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆| |04|SpringCloud微服務架構實戰綜合案例|[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆| |05|SpringBoot框架基礎應用入門到進階|[GitHub·點這裡](https://github.com/cicadasmile/spring-boot-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆| |06|SpringBoot框架整合開發常用中介軟體|[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆| |07|資料管理、分散式、架構設計基礎案例|[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆| |08|大資料系列、儲存、元件、計算等框架|[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)|☆☆