Hadoop框架:HDFS高可用環境配置
阿新 • • 發佈:2020-10-28
本文原始碼:[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)|☆☆