HDFS的HA
為什么要用集群
在企業(yè)中主要使用集群
在學(xué)習(xí)的過程中使用偽分布式即可,就是單點(diǎn)
HDFS中的
NN
SNN
DN
YARN 的
RM 老大
NM
每個(gè)組件只有一個(gè)即可
如果nn掛了就不能再繼續(xù)對(duì)外提供服務(wù),例如客戶端請(qǐng)求的讀寫,put get那些。
為了解決這個(gè)問題,企業(yè)一般都會(huì)準(zhǔn)備兩臺(tái)nn,對(duì)外提供服務(wù)的只有一臺(tái),處于active狀態(tài),另一臺(tái)是standby狀態(tài),進(jìn)行實(shí)時(shí)備份隨時(shí)準(zhǔn)備從standby狀態(tài)切換到active狀態(tài)
同時(shí),擁有兩臺(tái)nn基本上就不需要snn了,因?yàn)閚n會(huì)進(jìn)行實(shí)時(shí)備份,而snn只是進(jìn)行合并備份的工作,一個(gè)小時(shí)checkpoint。如果用snn只能恢復(fù)checkpoint點(diǎn)的數(shù)據(jù),如果中途掛掉,那中間那半小時(shí)的數(shù)據(jù)就會(huì)丟失。
主從架構(gòu) master-slave
比如hdfs讀寫請(qǐng)求都是先NN節(jié)點(diǎn);
但是:hbase 讀寫請(qǐng)求不是經(jīng)過老大master
?
命名空間:當(dāng)我們有兩臺(tái)nn的時(shí)候分別為nn1和nn2,我們執(zhí)行HDFS命令和我們只有一臺(tái)nn進(jìn)程有什么區(qū)別呢?
hdfs dfs -ls /? 這是我們?cè)趥畏植祭飯?zhí)行的HDFS命令。當(dāng)我們執(zhí)行這個(gè)命令的時(shí)候,就會(huì)去core.site.xml和hdfs.site.xml兩個(gè)配置文件里去尋找配置的信息,以便于找到服務(wù)器執(zhí)行相應(yīng)的命令。
但是當(dāng)我們有兩個(gè)nn進(jìn)程的時(shí)候上邊的那個(gè)命令就不能這樣執(zhí)行了,要加上你要執(zhí)行命令的服務(wù)器名稱等等
hdfs dfs -ls hdfs://ip:9000 / 這兩個(gè)nn分別對(duì)應(yīng)著兩個(gè)ip,這里的ip是誰(shuí)就通過哪個(gè)執(zhí)行命令。但是在shell腳本或者代碼之中,如果active的nn掛了,我們?cè)賵?zhí)行命令的時(shí)候不可能再改代碼改腳本,所以這里引出一個(gè)命名空間的概念,我們的腳本或者代碼先連接命名空間,命名空間再去嘗試連接active的nn,這個(gè)過程我們是無(wú)感知的。
命名空間的工作流程,命名空間從客戶端接到命令以后,會(huì)先嘗試連接其中一臺(tái)nn,這里我們就假設(shè)先連接nn2,發(fā)現(xiàn)nn2是standby狀態(tài),然后再去嘗試連接nn1,發(fā)現(xiàn)是active狀態(tài),這時(shí)候nn1會(huì)接受請(qǐng)求并執(zhí)行命令。
?
?
?
- 流程
- 1、客戶端根據(jù)命名空間發(fā)起請(qǐng)求
- 2、命名空間按照配置順序?qū)ふ襛ctive節(jié)點(diǎn)
- 3、NN1記錄editlog并寫入JN集群
- 4、NN2節(jié)點(diǎn)實(shí)時(shí)讀取JN集群的數(shù)據(jù),并進(jìn)行重演
- 重點(diǎn)
- 1、DN節(jié)點(diǎn)會(huì)向所有的NN節(jié)點(diǎn)匯報(bào)心跳狀況
- 2、ZKFC是單獨(dú)的進(jìn)程
?
HDFA的 HA的架構(gòu)部署
環(huán)境準(zhǔn)備? 3臺(tái)機(jī)器
hadoop001:ZK NN ZKFC JN DN
hadoop002:ZK NN ZKFC JN DN
hadoop003:ZK JN DN
每個(gè)組件的作用
?NN:fsimage editlog(讀寫請(qǐng)求記錄)
ZK(2n+1 奇數(shù)臺(tái)):負(fù)責(zé)選舉,決定active和standby在哪臺(tái)節(jié)點(diǎn)
ZKFC(zookeeperFailOverControl):節(jié)點(diǎn)真正掛掉,負(fù)責(zé)將standy狀態(tài)的節(jié)點(diǎn)切換到active狀態(tài)
JN:同步editlog的進(jìn)程
ZK是一個(gè)單獨(dú)的進(jìn)程集群
以下是企業(yè)ZK集群部署臺(tái)數(shù)參考
20臺(tái)節(jié)點(diǎn): 5臺(tái)
20~100臺(tái)節(jié)點(diǎn): 7/9/11臺(tái)
>100臺(tái)節(jié)點(diǎn): 11臺(tái)
但是: 不是說(shuō)zk節(jié)點(diǎn)越多越好,因?yàn)閦k節(jié)點(diǎn)越多做出選舉的決策的時(shí)間就越長(zhǎng)。
幾百臺(tái)節(jié)點(diǎn), zk部署的機(jī)器就它一個(gè)進(jìn)程,這是為了提高選舉效率
?
HA出現(xiàn)的主要原因就是為了解決單點(diǎn)問題,監(jiān)控狀態(tài)自動(dòng)備援
通過jn共享狀態(tài)
ZKFC
通過ZKFC切換nn的syandby狀態(tài)到active狀態(tài)
ZKFC是一個(gè)單獨(dú)的進(jìn)程
向ZK集群定期發(fā)送心跳,使得自己可以被選舉
監(jiān)控NN的健康狀態(tài)
當(dāng)自己被選為active的時(shí)候,ZKFC通過RPC協(xié)議調(diào)用使standby的節(jié)點(diǎn)切換為active狀態(tài),對(duì)外提供服務(wù)。這個(gè)過程是無(wú)感知的。
DN
同時(shí)向NN1和NN2發(fā)送心跳和塊報(bào)告
active的NN:
操作記錄寫到自己的editlog
同時(shí)把editlog里的內(nèi)容寫到JN集群里
接收DN的心跳和塊報(bào)告
standby的NN
接收J(rèn)N的集群日志
顯示讀取執(zhí)行l(wèi)og操作(重演),使得自己的元數(shù)據(jù)和active的nn的數(shù)據(jù)保持一致
也要接收DN的心跳和塊報(bào)告。
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/xuziyu/p/10658323.html
總結(jié)
- 上一篇: 瓷砖胶多少钱一包,一包瓷砖胶能贴多少平方
- 下一篇: 第六周编程总结