HDFS簡介
HDFS全稱Hadoop Distributed File System会通,是一個(gè)分布式文件系統(tǒng)螟凭,基于Google三大論文之一的Google File System開發(fā)货葬。主要為了解決在多個(gè)普通的節(jié)點(diǎn)(廉價(jià)的機(jī)器,只要有存儲(chǔ)空間卤材,cpu和內(nèi)存要求不高)上存儲(chǔ)并訪問日益增長的業(yè)務(wù)數(shù)據(jù)邻邮,并且在理論上可以實(shí)現(xiàn)橫向無限擴(kuò)展竣况。
架構(gòu)介紹
HDFS采用的是主從架構(gòu)(Master/Slave),其中namenode是主節(jié)點(diǎn)筒严,datanode是從節(jié)點(diǎn)丹泉,如下圖所示:- Namenode
1.接收客戶端的讀寫請(qǐng)求
2.存儲(chǔ)文件的元數(shù)據(jù),主要包括文件的文件名鸭蛙,Block信息摹恨,副本數(shù),文件的位置信息等
3.接收Datanode的心跳上報(bào)
所以娶视,如果Namenode很重要晒哄,如果down掉將不能接受Client請(qǐng)求,整個(gè)HDFS將不可用肪获。 - Datanode
1.客戶端實(shí)際的讀寫IO
2.接受Namenode指令寝凌,進(jìn)行Datanode之間的block副本的拷貝
3.上報(bào)給Datanode自身的信息(健康狀況、文件讀寫情況等) - Block
一個(gè)大文件被切分成多個(gè)Block塊孝赫,Hadoop 2.0后塊的默認(rèn)大小是128M较木,一個(gè)Block有多個(gè)副本,它們被存儲(chǔ)在不同的節(jié)點(diǎn)上青柄,具體存儲(chǔ)策略可查閱相關(guān)資料伐债。
常用命令
HDFS是一個(gè)文件系統(tǒng)预侯,它遵循了與Linux類似的POSIX標(biāo)準(zhǔn),所以有類似于linux的shell命令行操作接口(命令)峰锁。主要提供了User Commands萎馅、Admin Commands以及Debug Commands:
常用的用戶命令有dfs、fsck虹蒋,下面舉個(gè)例子:
1.查看根目錄下的文件列表
hdfs dfs -ls /
2.查看根目錄下所有文件的大小
hdfs dfs -du /
等校坑,fsck主要用來查看文件的block信息,以及修復(fù)損壞的block等千诬。
常用的管理命令有balancer耍目,用來平衡各個(gè)Datanode節(jié)點(diǎn)之間的存儲(chǔ)負(fù)載。
具體各個(gè)命令的用法可以查詢官方文檔HDFS命令徐绑,自己去探索邪驮。
內(nèi)存受限問題
為了快速響應(yīng)文件讀寫請(qǐng)求,HDFS把所有的元數(shù)據(jù)都存儲(chǔ)在Namenode內(nèi)存中傲茄,隨著業(yè)務(wù)數(shù)據(jù)增多或小文件很多毅访,都會(huì)導(dǎo)致Namenode 占用內(nèi)存不斷增加,如果占用內(nèi)存接近極限盘榨,會(huì)導(dǎo)致HDFS不可用喻粹,這樣就導(dǎo)致了內(nèi)存受限問題。在實(shí)際生產(chǎn)環(huán)境中草巡,可以用官方的Federation解決方案守呜,按業(yè)務(wù)分成多個(gè)HDFS集群;也可以提前評(píng)估數(shù)據(jù)基數(shù)及其增長速度,保證Namenode有足夠的可用內(nèi)存山憨;同時(shí)要做好定時(shí)小文件的合并查乒。
單點(diǎn)故障問題
我們上面已經(jīng)講到Namenode在集群中的地位至關(guān)重要,如果它down掉了將影響整個(gè)集群的訪問郁竟,存在單點(diǎn)故障問題玛迄,主要表現(xiàn)在以下幾方面:
- 如果Namenode掛掉了,無法接收Client的讀寫請(qǐng)求棚亩,直接影響業(yè)務(wù)
-
Namenode節(jié)點(diǎn)掛掉后蓖议,如果元數(shù)據(jù)信息丟失(比如硬盤損壞),整個(gè)集群數(shù)據(jù)將無法恢復(fù)讥蟆,造成災(zāi)難性后果
針對(duì)以上兩點(diǎn)勒虾,首先要有一個(gè)備份的Namenode,在當(dāng)前Namenode掛掉后可以馬上接管讀寫請(qǐng)求攻询,不影響業(yè)務(wù)从撼;另外州弟,要把元數(shù)據(jù)的信息(edits文件) 存儲(chǔ)在公共的區(qū)域而不是存儲(chǔ)在Namenode節(jié)點(diǎn)本地钧栖,防止Namenode節(jié)點(diǎn)機(jī)器故障后元數(shù)據(jù)信息丟失導(dǎo)致數(shù)據(jù)無法恢復(fù)低零。常用的高可用解決方案為QJM:
HDFS HA - 包含多個(gè)Namenode節(jié)點(diǎn),其中只有一個(gè)active拯杠,接收Client讀寫請(qǐng)求掏婶;其他是standby,除了不能接收Client讀寫請(qǐng)求潭陪,它同樣存儲(chǔ)元數(shù)據(jù)信息雄妥,接受Datanode上報(bào)Block信息,以便在變?yōu)閍ctive狀態(tài)是可以快速接受Client請(qǐng)求依溯。
- Namenode Active老厌、Standy的狀態(tài)選擇和切換由Zookeeper完成。每個(gè)Namenode都伴隨著一個(gè)zkfc服務(wù)黎炉,用來監(jiān)控Namenode可用性枝秤,如果其檢測(cè)到對(duì)應(yīng)的Namenode不可用,則上報(bào)給zk慷嗜,zk從其他Standby的Namenode節(jié)點(diǎn)中選擇一個(gè)為Active淀弹,通知zkfc把該Namenode變?yōu)锳ctive,這樣就實(shí)現(xiàn)了瞬間接管庆械。
- 還有一個(gè)問題薇溃,那就是元數(shù)據(jù)的存儲(chǔ)問題。為了避免元數(shù)據(jù)存儲(chǔ)在本地時(shí)(edits文件)機(jī)器故障導(dǎo)致數(shù)據(jù)無法恢復(fù)缭乘,在該HA方案中沐序,元數(shù)據(jù)被存儲(chǔ)在Journalnode節(jié)點(diǎn)中,為了防止單點(diǎn)故障堕绩,一般會(huì)有多個(gè)Journalnode節(jié)點(diǎn)形成一個(gè)集群(存儲(chǔ)edits文件的多個(gè)備份)薄啥,Namenode不斷向Journalnode集群同步元數(shù)據(jù),在恢復(fù)HDFS集群時(shí)逛尚,會(huì)從Journalnode中加載元數(shù)據(jù)
關(guān)鍵指標(biāo)
上面已經(jīng)詳細(xì)介紹了HDFS的架構(gòu)及高可用原理垄惧,現(xiàn)在總結(jié)一下HDFS運(yùn)維過程中應(yīng)該主要關(guān)注的一些指標(biāo):
1.Namenode Memory,如果該指標(biāo)已經(jīng)占比比較高(90%以上)绰寞,則需要考慮擴(kuò)展內(nèi)存到逊,合并文件,清除無用文件
2.Namenode GC Time滤钱,如果GC Time比較長觉壶,且Namenode RPC queue wait time比較長,則考慮Journalnode 元數(shù)據(jù)同步可能有問題件缸,需要重啟Journalnode
3.Corrupted Blocks铜靶,如果損壞Block較多,需要手動(dòng)修復(fù)
4.Under Replicated Blocks他炊,如果副本數(shù)缺失很多争剿,需要手動(dòng)補(bǔ)充副本已艰。
完。