一、HDFS簡(jiǎn)介
- Hadoop Distributed filesystem:Hadoop分布式文件系統(tǒng)
- HDFS以流式數(shù)據(jù)訪問(wèn)模式來(lái)存儲(chǔ)超大文件。一次寫(xiě)入、多次讀取。能存儲(chǔ)PB級(jí)的數(shù)據(jù)。
- 運(yùn)行在普通硬件上。因?yàn)镠DFS可以防止宕機(jī)時(shí)數(shù)據(jù)丟失。
- HDFS是為高數(shù)據(jù)吞吐量應(yīng)用優(yōu)化的,間接提高了時(shí)間延遲,所以對(duì)于低延遲的的訪問(wèn)需求,最好使用HBase。
- 不適合存儲(chǔ)大量的小文件。namenode將文件系統(tǒng)的元數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此該文件系統(tǒng)所能存儲(chǔ)的文件總數(shù)受限于namenode的內(nèi)存容量。
- HDFS中的文件只有一個(gè)writer,而且寫(xiě)操作總是將數(shù)據(jù)添加在文件的末尾,他不支持具有多個(gè)寫(xiě)入者的操作,也不支持在文件的任意位置進(jìn)行修改。
二、HDFS相關(guān)概念
1.數(shù)據(jù)塊
傳統(tǒng)磁盤(pán)塊:每個(gè)磁盤(pán)都有默認(rèn)的數(shù)據(jù)塊大小,這是磁盤(pán)進(jìn)行數(shù)據(jù)讀寫(xiě)的最小單位。構(gòu)建于單個(gè)磁盤(pán)之上的文件系統(tǒng)通過(guò)磁盤(pán)塊來(lái)管理該文件系統(tǒng)中的塊,該文件系統(tǒng)塊的大小可以使磁盤(pán)塊的整數(shù)倍。文件系統(tǒng)塊一般為幾千字節(jié),而磁盤(pán)塊一般為512字節(jié)。
-
HDFS中的塊(block):默認(rèn)為64MB(根據(jù)需要修改)。HDFS上的文件也被劃分為塊大小的多個(gè)分塊,作為獨(dú)立的存儲(chǔ)單元。
1.HDFS的塊比磁盤(pán)的塊大,目的是為了最小化尋址開(kāi)銷。 2.塊不能設(shè)置的過(guò)大,map任務(wù)通常一次只處理一個(gè)塊中的數(shù)據(jù),任務(wù)數(shù)過(guò)少會(huì)影響運(yùn)行速度。 3.HDFS中的塊是抽象的。 好處一:一個(gè)文件的大小可以大于網(wǎng)絡(luò)中任何一個(gè)磁盤(pán)的容量。 好處二:簡(jiǎn)化了存儲(chǔ)子系統(tǒng)的設(shè)計(jì)。 好初三:塊非常適合用于數(shù)據(jù)備份進(jìn)而提供數(shù)據(jù)容錯(cuò)能力和提高可用性。
2.namenode和datanode
HDFS集群有兩類節(jié)點(diǎn):一個(gè)namenode(管理者)和多個(gè)datanode(工作者)。
- namenode管理文件系統(tǒng)的命名空間。它維護(hù)著文件系統(tǒng)樹(shù)及整棵樹(shù)內(nèi)所有的文件和目錄。這些信息以兩個(gè)文件形式永久保存在本地磁盤(pán)上:命名空間鏡像文件和編輯日志文件。namenode也記錄著每個(gè)文件中各個(gè)塊所在的數(shù)據(jù)節(jié)點(diǎn)信息,但它并不永久保存塊的位置信息,因?yàn)檫@些信息會(huì)在系統(tǒng)啟動(dòng)時(shí)由數(shù)據(jù)節(jié)點(diǎn)重建。
- 客戶端(client)代表用戶通過(guò)與namenode和datanode交互來(lái)訪問(wèn)整個(gè)文件系統(tǒng)。
- datanode是文件系統(tǒng)的工作節(jié)點(diǎn)。根據(jù)需要存儲(chǔ)并檢索數(shù)據(jù)塊,并定期向namenode發(fā)送它們所存儲(chǔ)的塊的列表。
namenode的兩種容錯(cuò)機(jī)制
- 機(jī)制一:備份組成文件系統(tǒng)元數(shù)據(jù)持久狀態(tài)的文件。將持久狀態(tài)寫(xiě)入本地磁盤(pán)的同時(shí),寫(xiě)入一個(gè)遠(yuǎn)程掛載的網(wǎng)絡(luò)文件系統(tǒng)。
- 機(jī)制二:運(yùn)行一個(gè)輔助namenode,作用是定期通過(guò)編輯日志合并命名空間鏡像,以防止編輯日志過(guò)大。這個(gè)輔助namenode一般在另一臺(tái)單獨(dú)的物理計(jì)算機(jī)上運(yùn)行,它會(huì)保存合并后的命名空間鏡像的副本,并在namenode發(fā)生故障時(shí)啟用。
3.HDFS的高可用性
Hadoop的2.X發(fā)行版本中,配置了一對(duì)活動(dòng)-備用namenode,當(dāng)活動(dòng)namenode失效,備用namenode就會(huì)將接管他的任務(wù)并開(kāi)始服務(wù)于來(lái)自客戶端的請(qǐng)求,不會(huì)有任何明顯中斷。實(shí)現(xiàn)這一目標(biāo)需要在架構(gòu)上做如下修改:
- namenode之間需要通過(guò)高可用的共享存儲(chǔ)實(shí)現(xiàn)編輯日志的共享。當(dāng)備用namenode接管工作之后,它將通讀共享編輯日志直至末尾,以實(shí)現(xiàn)與活動(dòng)namenode的狀態(tài)同步,并繼續(xù)讀取由活動(dòng)namenode寫(xiě)入的新條目。
- datanode需要同時(shí)向兩個(gè)namenode發(fā)送數(shù)據(jù)塊處理報(bào)告,因?yàn)閿?shù)據(jù)塊的映射信息存儲(chǔ)在namenode的內(nèi)存中,而非磁盤(pán)。
- 客戶端需要使用特定的機(jī)制來(lái)處理namemode的失效問(wèn)題,這一機(jī)制對(duì)用戶是透明的。
4.數(shù)據(jù)流
3.png
4.png