前言
- 在大數(shù)據(jù)場(chǎng)景中,大量數(shù)據(jù)是以文件形式儲(chǔ)存的惋砂,典型的是行為日志數(shù)據(jù)(用戶(hù)搜索日志妒挎,購(gòu)買(mǎi)日志,點(diǎn)擊日志西饵,以及機(jī)器操作數(shù)據(jù)等)
- 這些數(shù)據(jù)都很重要酝掩,則就必須滿(mǎn)足可擴(kuò)展,容錯(cuò)眷柔,易用等特點(diǎn)
背景
HDFS的出現(xiàn)主要解決一下問(wèn)題:
- 容錯(cuò)性
數(shù)據(jù)越來(lái)越大期虾,所以?xún)?chǔ)存的服務(wù)器就會(huì)原來(lái)越多,這就要求當(dāng)中一臺(tái)服務(wù)器異常不影響數(shù)據(jù) - 統(tǒng)一格式儲(chǔ)存
數(shù)據(jù)的大小各不相同驯嘱,這就要求數(shù)據(jù)的保存要從新定義镶苞,(block 塊是一個(gè)很好的解決問(wèn)題) - 一次寫(xiě)入多次讀取
有些數(shù)據(jù)(日志)只會(huì)寫(xiě)一次,多次讀取
分布式系統(tǒng)的存儲(chǔ)種類(lèi)
- 文件級(jí)別的分布式系統(tǒng)
存儲(chǔ)單位是文件 - 塊級(jí)別的分布式系統(tǒng)
存儲(chǔ)單位是將文件分為的等大小的塊
HDFS的基本架構(gòu)
hdfs 采用主從架構(gòu)(master-slave)
NameNode(主節(jié)點(diǎn))
hdfs的集群管理者鞠评,負(fù)責(zé)管理集群的元信息(維護(hù)整個(gè)文件的目錄結(jié)構(gòu)樹(shù)和數(shù)據(jù)塊信息)和管理datanode(通過(guò)心跳周期性的檢測(cè)DataNode的存活狀態(tài)
NameNode的相關(guān)問(wèn)題
1茂蚓、單點(diǎn)故障:
一個(gè)集群只有一個(gè)NameNode為之服務(wù),稱(chēng)為“active NameNode”,為了避免單點(diǎn)故障,可備用一臺(tái)備用機(jī)“standby NameNode”;
2聋涨、主備切換:
手動(dòng)模式:通過(guò)命令
自動(dòng)模式:借助zookeeper
3晾浴、狀態(tài)同步:
借助第三方日志儲(chǔ)存系統(tǒng),activeNameNode將操作日志寫(xiě)入共享系統(tǒng)牍白,standby NameNode從共享系統(tǒng)中讀取出來(lái)拓展
當(dāng)數(shù)據(jù)越來(lái)越大時(shí)脊凰,單個(gè)nameNode會(huì)成為數(shù)據(jù)傳輸?shù)钠款i,這是就需要對(duì)NameNode進(jìn)行分片茂腥,也就是可以允許多個(gè)NameNode 對(duì)集群進(jìn)行服務(wù)(當(dāng)然狸涌,也得考慮單點(diǎn)故障)
SecondNameNode(檢查點(diǎn)節(jié)點(diǎn))
- 首先,它定時(shí)到NameNode去獲取edit logs最岗,并更新到fsimage上杈抢。
- 一旦它有了新的fsimage文件,它將其拷貝回NameNode中仑性。
- NameNode在下次重啟時(shí)會(huì)使用這個(gè)新的fsimage文件惶楼,從而減少重啟的時(shí)間。
DataNode(從節(jié)點(diǎn))
- 儲(chǔ)存實(shí)際的數(shù)據(jù)塊诊杆,通過(guò)心跳即時(shí)匯報(bào)自己的狀態(tài)信息
Client(客戶(hù)端)
- 用戶(hù)借助client來(lái)與nameNode 和 dataNode 進(jìn)行交互歼捐,完成各種操作
- client 完成數(shù)據(jù)的分塊
- client 向dataNode傳輸數(shù)據(jù)是流水線操作
Hdfs的容錯(cuò)
- NameNode 異常
前面已經(jīng)提到了nameNode 可設(shè)置主從配置 - DataNode 服務(wù)器異常
Hdfs的數(shù)據(jù)默認(rèn)是3副本,當(dāng)發(fā)現(xiàn)有數(shù)據(jù)異常晨汹,nameNode 可從新分配 - 數(shù)據(jù)塊損壞
NataNode在存儲(chǔ)數(shù)據(jù)的時(shí)候豹储,會(huì)相應(yīng)的生成一段隨機(jī)數(shù),當(dāng)讀取的時(shí)候發(fā)現(xiàn)隨機(jī)數(shù)不一致淘这,就認(rèn)為數(shù)據(jù)失效了
HDFS的副本放置策略
- 客戶(hù)端與Datanode 同節(jié)點(diǎn)(第一個(gè)副本寫(xiě)在同節(jié)點(diǎn)的datanode上剥扣,另外兩個(gè)副本寫(xiě)在另一個(gè)相同機(jī)架的不同dataNode上)
- 客戶(hù)端與NameNode 與dataNode 不同節(jié)點(diǎn),(第一個(gè)副本會(huì)隨機(jī)寫(xiě)在一個(gè)nataNode上铝穷,另外兩個(gè)寫(xiě)在另一個(gè)相同機(jī)架的不同節(jié)點(diǎn)上)
HDFS的異構(gòu)存儲(chǔ)介質(zhì)
- hdfs 可支持多種儲(chǔ)存介質(zhì)(固態(tài)硬盤(pán)钠怯,內(nèi)存等)
集中式緩存管理
HDFS可通過(guò)命令或者api來(lái)管理集中式緩存系統(tǒng)中的文件和目錄,來(lái)提高效率
訪問(wèn)方式
- shell
- api