1 .Hadoop HA 說明
1.1 Hadoop HA主備介紹
? 自Hadoop2.x版本后可以增加多個namenode節點【保存著整個系統的名稱空間和檔案資料塊的地址映射又稱“元資料”】,多個namenode有活躍(active)和 準備(Standby)兩種狀態 , 即一個幫派有一個正一個副,平時都是正幫主主持大局,但如果正幫主遭遇不測被Kill S掉后,這時候副幫主就得出來主持大局了,
1.2 Hadoop HA選舉介紹
? Hadoop HA 的正幫主(active)選舉一般都要借助長老會(Zookeeper)幫助,長老會保存著每個幫會成員的生命水晶,生命水晶一般會檢測到每個幫員生命特征,一但生命水晶熄滅也就代表人死亡,長老會會定時查看幫主的生命水晶狀況,一但幫主生命水晶熄滅,長老會會立刻在副幫主之間推選出新的正幫主,從而繼續管理幫內事務,
1.3 Hadoop HA同步機制(QJM)
? 當長老會(Zookeeper)推選出新的正幫主,那被推出的幫主他是如何快速接手幫內事務呢?答案是正副幫主之間有一個小本本,這個小本本記錄著大小幫內的事務,幫主會將幫內事務寫在這個正副幫主共享的小本本上面,所以一但幫主慘遭不測,其他幫主憑借幫主小本本也能快速上位處理幫內事務,
2. Hadoop HA 部署
2.1部署前的環境配置:
-
jdk1.8安裝并配置環境變數
-
ssh免密,注意因為是多幫主幫派(namenode)故在“兩個幫主”(namenode)節點生成密鑰分別分發給所以節點
-
Zookeeper安裝,每個節點都要安裝,
?
2.2 Hadoop 節點部署
| ip | 主機名 | 服務 | 備注 |
|---|---|---|---|
| 192.168.216.111 | hadoop01 | jdk、NameNode、DataNode、JouranlNode、ResourceManger、NodeManager | 正幫主 |
| 192.168.216.112 | hadoop02 | jdk、NameNode、DataNode、JouranlNode、ResourceManger、NodeManager | 副幫主 |
| 192.168.216.113 | hadoop03 | jdk、DataNode、JouranlNode、NodeManager |
# 解壓Hadoop
[root@hadoop01 src]# tar -zxvf /home/hadoop-2.7.6.tar.gz -C /usr/local/src/
#配置hadoop環境變數
[root@hadoop01 src]# vi /etc/profile
#增加jdk、zookeeper、hadoop的地址
#注意:要添加你自己解壓所在的地址,下面是我的解壓地址
export JAVA_HOME=/usr/local/src/jdk1.8.0_152/
export ZK_HOME=/usr/local/src/zookeeper-3.4.10/
export HADOOP_HOME=/usr/local/src/hadoop-2.7.6/
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
#重繪環境變數
[root@hadoop01 src]# source /etc/profile
NameNode和ResourceManager配置高可用大概需要配置如下6個組態檔:
2.1.1 core-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/core-site.xml
<configuration>
<!--指定hdfs檔案系統的默認名-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://sw</value>
</property>
<!--指定zk的集群地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--指定hadoop的臨時目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadata/tmp</value>
</property>
</configuration>
注意 " fs.defaultFS "和 " fs.default.name"的區別:
- 使用 " fs.defaultFS “首先會判斷Hadoop是否開啟HA(高可用),使用” fs.defaultFS "一般使用在Hadoop HA
- 使用 " fs.default.name "一般在單一的Namenode節點(一個幫就一個幫主) ,如果在單一的Namenode節點用 " fs.defaultFS "就會報錯
2.1.2 hdfs-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hdfs-site.xml
<configuration>
<!--指定塊的副本數,默認是3-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定資料塊的大小-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!--指定namenode的元資料目錄-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadata/dfs/name</value>
</property>
<!--指定datanode存盤資料目錄-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadata/dfs/data</value>
</property>
<!--hdfs的命名空間,邏輯名稱-->
<property>
<name>dfs.nameservices</name>
<value>sw</value>
</property>
<!--qianfeng下的namenode的別名-->
<property>
<name>dfs.ha.namenodes.sw</name>
<value>nn1,nn2</value>
</property>
<!--指定nn1和nn2的通信地址-->
<property>
<name>dfs.namenode.rpc-address.qianfeng.nn1</name>
<value>hadoop01:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.qianfeng.nn2</name>
<value>hadoop02:9000</value>
</property>
<!--指定namenode的web通信地址-->
<property>
<name>dfs.namenode.http-address.qianfeng.nn1</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.qianfeng.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定共享日志目錄, 這個就是幫主的小本本-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/sw</value>
</property>
<!--指定開啟namenode失敗自動轉移,這個就是長老會根據生命水晶檢測選舉新幫主-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--指定失敗轉移的類-->
<property>
<name>dfs.client.failover.proxy.provider.qianfeng</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--防止namenode的腦裂-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--指定超時時間設定-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!--指定日志的本地目錄-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadata/journal1</value>
</property>
<!--是否開啟webhdfs的-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--是否開啟hdfs的權限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
2.1.3 mapred-site.xml
[root@hadoop01 hadoop-2.7.6]# mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/mapred-site.xml
<configuration>
<!--配置mapreduce的框架名稱-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<!--指定jobhistoryserver的內部通信地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<!--指定jobhistoryserver的web地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
</configuration>
jobhistoryserver: 歷史服務器,管理者可以通過歷史服務器查看已經運行完成的Mapreduce作業記錄,
2.1.4 yarn-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/yarn-site.xml
<configuration>
<!--指定mapreduce的shuffle服務-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--是否開啟yarn的HA-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>sw_yarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop01:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop02:8088</value>
</property>
<!--指定zookeeper的集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
2.1.5 slaves
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/slaves
hadoop01
hadoop02
hadoop03
2.1.6 hadoop-env.sh
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hadoop-env.sh
#添加jdk路徑
export JAVA_HOME=/usr/local/src/jdk1.8.0_152/
3. Hadoop HA 開啟
3.1 先啟動三臺的Zookeeper
#節點1
[root@hadoop01 hadoop-2.7.6]# zkServer.sh start
#節點2
[root@hadoop02 hadoop-2.7.6]# zkServer.sh start
#節點3
[root@hadoop03 hadoop-2.7.6]# zkServer.sh start
3.2 啟動 JournalNode
JournalNode : 作為獨立行程進行相互通信,當active狀態的NameNode的命名空間有任何修改時,會告知大部分的JournalNodes行程,standby狀態的NameNode有能力讀取JNs中的變更資訊,并且一直監控edit log的變化,把變化應用于自己的命名空間,standby可以確保在集群出錯時,命名空間狀態已經完全同步了,(即幫主會把本幫的事務寫在小本本上,副幫主也能同時獲取小本本的記錄)
[root@hadoop01 hadoop-2.7.6]# hadoop-daemons.sh start journalnode
3.3 namenode格式化并啟動
HDFS集群有兩類節點以管理節點-作業節點模式運行,即一個namenode(管理節點)和多個datanode(作業節點),
namenode(管理檔案系統的命名空間):它維護著檔案系統樹及整棵樹內的所有檔案和目錄,namenode以兩個檔案形式永久保存在本地磁盤上 ”命名空間鏡像檔案“ 和 ”編輯日志檔案“,
[root@hadoop01 ~]# hdfs namenode -format
[root@hadoop01 ~]# hadoop-daemon.sh start namenode
3.4 另外的namenode節點同步
副幫主查看幫主在小本本寫的”羞羞“事,并記錄在自己這里
[root@hadoop02 ~]# hdfs namenode -bootstrapStandby
3.5 格式化zkfc
#選擇其中一個namenode節點進行格式化zkfc
#前提QuorumPeerMain服務必須處于開啟狀態,客戶端zkfc才能格式化成功
[root@hadoop01 ~]# hdfs zkfc -formatZK
3.6 啟動集群
[root@hadoop01 ~]# start-all.sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272202.html
標籤:其他
上一篇:線性表-鏈表1(Java)
