新聞中心
1. 為什么要搭建HA?
在hadoop2.x之前,在HDFS 集群中NameNode 存在單點(diǎn)故障 (SPOF:A Single Point of Failure)。對(duì)于只有一個(gè) NameNode 的集群,如果 NameNode 機(jī)器出現(xiàn)故障(比如宕機(jī)或是軟件、硬件升級(jí)),那么整個(gè)集群將無法使用,必須等到 NameNode 重新啟動(dòng),之后才能對(duì)外提供服務(wù),這個(gè)方式在生成環(huán)境中是絕對(duì)不允許出現(xiàn)的。
HDFS 的 HA:通過配置 Active/Standby 兩個(gè) NameNodes 實(shí)現(xiàn)在集群中對(duì) NameNode 的熱備來解決上述問題。如果出現(xiàn)故障,如機(jī)器崩潰或機(jī)器需要升級(jí)維護(hù),這時(shí)可通過此種方式將 NameNode 很快的切換到另外一臺(tái)機(jī)器。
2. HA的工作原理?
解釋(數(shù)據(jù)一致以及持久化問題):
- 當(dāng)hdfs客戶端連接namenode時(shí),namenode啟動(dòng)時(shí),會(huì)向JN集群提交edtis log(操作記錄日志)。
- 此時(shí)在JN集群中,當(dāng)有一半的集群服務(wù)成功的接收到了消息,然后返回給namenode,這就表示edits log上傳成功。
- 此時(shí)NameNode(standBy),需要從JN集群取回元數(shù)據(jù)信息,然后整合新的fsimage,然后推送回NameNode(active)
- 在NameNode(standBy)向JN索要數(shù)據(jù)的時(shí)候,首先在JN中會(huì)查看是否有宕機(jī)的機(jī)器,采用過半機(jī)制(當(dāng)集群中有部分服務(wù)器宕機(jī)時(shí),此時(shí)集群會(huì)將大部分可以使用的機(jī)器作為主,其他的機(jī)器全部停止服務(wù)),去向備機(jī)(standBy)提供對(duì)外的數(shù)據(jù)傳輸。
- 在解決block 塊信息時(shí),此時(shí)datanode會(huì)向兩臺(tái)namenode都發(fā)送block 塊信息。
解釋(解決主備切換問題): - 此時(shí)需要使用到另外一個(gè)集群zookeeper,zookeeper集群是一個(gè)高可用的集群,它的實(shí)現(xiàn)機(jī)制是,首先是一個(gè)服務(wù)器提供對(duì)外的服務(wù),其他的機(jī)器是備機(jī),當(dāng)主機(jī)壞了的時(shí)候,此時(shí)zookeeper集群中采取投票機(jī)制(邏輯時(shí)鐘,ID號(hào),以及數(shù)據(jù)的更新程度),選出新的主。
- 此時(shí)ZKFC務(wù)控制線程一直手抓住了zookeeper集群,另一只手抓住了NameNode。
- 抓住NameNode(active)的服務(wù)控制,監(jiān)控NameNode(active)的狀態(tài),實(shí)時(shí)的向zookeeper集群匯報(bào)。
- 住NameNode(standBy)的服務(wù)控制,接收zookeeper集群發(fā)送的信息,如果發(fā)送過來的信息,表示主NameNode已停止服務(wù),立刻調(diào)用服務(wù)控制中的回調(diào)函數(shù),讓NameNode(standBy)變成主機(jī)繼續(xù)提供服務(wù)。
- ? 以上的作用是一個(gè)和keeplive相同的作用,使用zookeeper不同之處在于,如果服務(wù)控制處出現(xiàn)進(jìn)程的異常退出時(shí),此時(shí)通過zookeeper集群會(huì)將備機(jī)改為active狀態(tài),此時(shí)主機(jī)可能還是active,就造成了兩臺(tái)active的NameNode。在zookeeper中是這樣解決的:當(dāng)有一個(gè)服務(wù)控制進(jìn)程異常退出后,他會(huì)有一只無形的手去連接另外一臺(tái)NameNode,并且在可控的范圍內(nèi),將其變成主(active),而將自己無法控制的那臺(tái)NameNode,變成備機(jī)。
3. HA的集群搭建?
搭建集群前的準(zhǔn)備:https://blog.51cto.com/14048416/2341450
zookeeper集群的搭建:https://blog.51cto.com/14048416/23361781)集群的規(guī)劃
2)具體安裝步驟:
1)上傳安裝包 hadoop-2.6.5-centos-6.7.tar.gz
2)解壓到對(duì)應(yīng)的安裝目錄
[hadoop@hadoop01 ~]$tar -zxvf hadoop-2.6.5-centos-6.7.tar.gz -C /home/hadoop/apps/
3)修改配置文件
hadoo-env.sh:
加入:export JAVA_HOME= /usr/local/jdk1.8.0_73
core-site.xml:
fs.defaultFS
hdfs://myha01/
hadoop.tmp.dir
/home/hadoop/data/hadoopdata/
ha.zookeeper.quorum
hadoop01:2181,hadoop02:2181,hadoop03:2181
hdfs-site.xml:
dfs.replication
3
dfs.nameservices
myha01
dfs.ha.namenodes.myha01
nn1,nn2
dfs.namenode.rpc-address.myha01.nn1
hadoop01:9000
dfs.namenode.http-address.myha01.nn1
hadoop01:50070
dfs.namenode.rpc-address.myha01.nn2
hadoop02:9000
dfs.namenode.http-address.myha01.nn2
hadoop02:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01
dfs.journalnode.edits.dir
/home/hadoop/data/journaldata
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.myha01
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverPr
oxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
30000
mapred-site.xml:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoop02:10020
mapreduce.jobhistory.webapp.address
hadoop02:19888
yarn-site.xml:
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yrc
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hadoop01
yarn.resourcemanager.hostname.rm2
hadoop02
yarn.resourcemanager.zk-address
hadoop01:2181,hadoop02:2181,hadoop03:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
86400
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
slaves:
hadoop01
hadoop02
hadoop03
4)分發(fā)安裝包到其他機(jī)器
[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop02:$PWD
[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop03:$PWD
5)分別配置環(huán)境變量
[hadoop@hadoop01 apps]$ vi ~/.bashrc
添加兩行:
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[hadoop@hadoop01 apps]$ source ~/.bashrc
6)集群初始化操作
先啟動(dòng) zookeeper 集群:
啟動(dòng):zkServer.sh start
檢查啟動(dòng)是否正常:zkServer.sh status
啟動(dòng) journalnode 進(jìn)程:
[hadoop@hadoop01 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop02 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop03 ~]$ hadoop-daemon.sh start journalnode
然后用 jps 命令查看是否各個(gè) datanode 節(jié)點(diǎn)上都啟動(dòng)了 journalnode 進(jìn)程
在第一個(gè) namenode 上執(zhí)行格式化操作:
[hadoop@hadoop01 ~]$ hadoop namenode -format
然后會(huì)在 core-site.xml 中配置的臨時(shí)目錄中生成一些集群的信息把他拷貝的第二個(gè) namenode 的相同目錄下
兩個(gè) namenode 節(jié)點(diǎn)該目錄中的數(shù)據(jù)結(jié)構(gòu)是一致的
[hadoop@hadoop01 ~]$ scp -r ~/data/hadoopdata/ hadoop03:~/data
或者在另一個(gè)namenode節(jié)點(diǎn)上使用:hadoop namenode -bootstrapStandby
格式化 ZKFC(在一臺(tái)集群上格式化即可):
[hadoop@hadoop01 ~]$ hdfs zkfc -formatZK
啟動(dòng) HDFS:
[hadoop@hadoop01 ~]$ start-dfs.sh
啟動(dòng) YARN:
[hadoop@hadoop01 ~]$ start-yarn.sh
若備用節(jié)點(diǎn)的 resourcemanager 沒有啟動(dòng)起來,則手動(dòng)啟動(dòng)起來:
[hadoop@hadoop02 ~]$ yarn-daemon.sh start resourcemanager
7)補(bǔ)充:
查看各主節(jié)點(diǎn)的狀態(tài)
HDFS:
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
YARN:
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
4. HA的集群搭建后測試
1.手動(dòng)殺死active的namenode,看看集群的狀況
2.手動(dòng)殺死active的resourcemanager,看看集群的狀況
3.在上傳文件時(shí),殺死namenode,查看集群狀況
4.在執(zhí)行任務(wù)時(shí),殺死resourcemanager,查看集群狀態(tài)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文題目:hadoop的HA-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://ef60e0e.cn/article/desdjo.html