Hadoop框架:HDFS高可用环境配置
本文源碼:GitHub·點這里 || GitEE·點這里
一、HDFS高可用
1、基礎描述
在單點或者少數節點故障的情況下,集群還可以正常的提供服務,HDFS高可用機制可以通過配置Active/Standby兩個NameNodes節點實現在集群中對NameNode的熱備來消除單節點故障問題,如果單個節點出現故障,可通過該方式將NameNode快速切換到另外一個節點上。
2、機制詳解
- 基于兩個NameNode做高可用,依賴共享Edits文件和Zookeeper集群;
- 每個NameNode節點配置一個ZKfailover進程,負責監控所在NameNode節點狀態;
- NameNode與ZooKeeper集群維護一個持久會話;
- 如果Active節點故障停機,ZooKeeper通知Standby狀態的NameNode節點;
- 在ZKfailover進程檢測并確認故障節點無法工作后;
- ZKfailover通知Standby狀態的NameNode節點切換為Active狀態繼續服務;
ZooKeeper在大數據體系中非常重要,協調不同組件的工作,維護并傳遞數據,例如上述高可用下自動故障轉移就依賴于ZooKeeper組件。
二、HDFS高可用
1、整體配置
| 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
<configuration><!-- NameNode集群模式 --><property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property><!-- 指定hadoop運行時產生文件的存儲目錄 --><property><name>hadoop.tmp.dir</name><value>/opt/hopHA/hadoop2.7/data/tmp</value></property> </configuration>配置hdfs-site.xml,添加內容如下
<!-- 分布式集群名稱 --> <property><name>dfs.nameservices</name><value>mycluster</value> </property><!-- 集群中NameNode節點 --> <property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value> </property><!-- NN1 RPC通信地址 --> <property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>hop01:9000</value> </property><!-- NN2 RPC通信地址 --> <property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>hop02:9000</value> </property><!-- NN1 Http通信地址 --> <property><name>dfs.namenode.http-address.mycluster.nn1</name><value>hop01:50070</value> </property><!-- NN2 Http通信地址 --> <property><name>dfs.namenode.http-address.mycluster.nn2</name><value>hop02:50070</value> </property><!-- 指定NameNode元數據在JournalNode上的存放位置 --> <property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</value> </property><!-- 配置隔離機制,即同一時刻只能有一臺服務器對外響應 --> <property><name>dfs.ha.fencing.methods</name><value>sshfence</value> </property><!-- 使用隔離機制時需要ssh無秘鑰登錄--> <property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value> </property><!-- 聲明journalnode服務器存儲目錄--> <property><name>dfs.journalnode.edits.dir</name><value>/opt/hopHA/hadoop2.7/data/jn</value> </property><!-- 關閉權限檢查--> <property><name>dfs.permissions.enable</name><value>false</value> </property><!-- 訪問代理類失敗自動切換實現方式--> <property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property>依次啟動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 namenodeNN2同步NN1數據
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandbyNN2啟動NameNode
[root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode查看當前狀態
在NN1上啟動全部DataNode
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanodeNN1切換為Active狀態
[root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1 [root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active3、故障轉移配置
配置hdfs-site.xml,新增內容如下,同步集群
<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value> </property>配置core-site.xml,新增內容如下,同步集群
<property><name>ha.zookeeper.quorum</name><value>hop01:2181,hop02:2181,hop03:2181</value> </property>關閉全部HDFS服務
[root@hop01 hadoop2.7]# sbin/stop-dfs.sh啟動Zookeeper集群
/opt/zookeeper3.4/bin/zkServer.sh starthop01初始化HA在Zookeeper中狀態
[root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZKhop01啟動HDFS服務
[root@hop01 hadoop2.7]# sbin/start-dfs.shNameNode節點啟動ZKFailover
這里hop01和hop02先啟動的服務狀態就是Active,這里先啟動hop02。
[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc結束hop02的NameNode進程
kill -9 14422等待一下查看hop01狀態
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active三、YARN高可用
1、基礎描述
基本流程和思路與HDFS機制類似,依賴Zookeeper集群,當Active節點故障時,Standby節點會切換為Active狀態持續服務。
2、配置詳解
環境同樣基于hop01和hop02來演示。
配置yarn-site.xml,同步集群下服務
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!--啟用HA機制--><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!--聲明Resourcemanager服務--><property><name>yarn.resourcemanager.cluster-id</name><value>cluster-yarn01</value></property><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><property><name>yarn.resourcemanager.hostname.rm1</name><value>hop01</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hop02</value></property><!--Zookeeper集群的地址--> <property><name>yarn.resourcemanager.zk-address</name><value>hop01:2181,hop02:2181,hop03:2181</value></property><!--啟用自動恢復機制--> <property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><!--指定狀態存儲Zookeeper集群--> <property><name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property></configuration>重啟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 namenodeNN2上同步NN1元數據
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby啟動集群下DataNode
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanodeNN1設置為Active狀態
先啟動hop01即可,然后啟動hop02。
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfchop01啟動yarn
[root@hop01 hadoop2.7]# sbin/start-yarn.shhop02啟動ResourceManager
[root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager查看狀態
[root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1四、源代碼地址
GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent推薦閱讀:編程體系整理
| 01 | Java描述設計模式,算法,數據結構 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 02 | Java基礎、并發、面向對象、Web開發 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 03 | SpringCloud微服務基礎組件案例詳解 | GitHub·點這里 | GitEE·點這里 | ☆☆☆ |
| 04 | SpringCloud微服務架構實戰綜合案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合開發常用中間件 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 07 | 數據管理、分布式、架構設計基礎案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 08 | 大數據系列、存儲、組件、計算等框架 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
總結
以上是生活随笔為你收集整理的Hadoop框架:HDFS高可用环境配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bind9 配置说明
- 下一篇: maven中设置代理服务器