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