當(dāng)數(shù)據(jù)集的大小超過一臺獨(dú)立物理計算機(jī)的存儲能力時,就有必要對它進(jìn)行分區(qū) (partition)并存儲到若干臺單獨(dú)的計算機(jī)上。管理網(wǎng)絡(luò)中跨多臺計算機(jī)存儲的文件系統(tǒng)成為分布式文件系統(tǒng) (Distributed filesystem)。該系統(tǒng)架構(gòu)于網(wǎng)絡(luò)之上,勢必會引入網(wǎng)絡(luò)編程的復(fù)雜性,因此分布式文件系統(tǒng)比普通磁盤文件系統(tǒng)更為復(fù)雜。
1.介紹
需要跨機(jī)器存儲,統(tǒng)一管理分布在集群上的文件系統(tǒng)統(tǒng)稱為分布式文件系統(tǒng)。 Hodoop使用HDFS(Hadoop Distributed File System)作文存儲系統(tǒng)。HDFS使用多臺計算機(jī)存儲文件,對外提供統(tǒng)一操作文件的接口。
2.應(yīng)用場景 適合的場景
a.存儲非常大的文件并且對延時沒有要求 。
b.彩球流式的數(shù)據(jù)訪問方式,即一次寫入,多次讀取。數(shù)據(jù)集經(jīng)常從數(shù)據(jù)源生成或者拷貝,然后做很多分析工作。
c.對硬件要求不高 。
d.高容錯 。
e.可拓展。
不適合的場景
a.對延時有要求。
b.大量小文件。每個文件都需要對應(yīng)一條元數(shù)據(jù),元數(shù)據(jù)存儲在NameNode的內(nèi)存中 。
c.多方讀寫。不支持文件任意offset的修改。不支持多個寫入器。
3.HDFS的架構(gòu)
HDFS是一個主/從體系結(jié)構(gòu)。 HDFS由四部分組成,HDFS Client,站群服務(wù)器,NameNode,DataNode和Secondary NameNode。
Client:客戶端 。
a.文件切分,文件上傳HDFS的時候,將文件切分成一個一個的數(shù)據(jù)塊(Block)進(jìn)行存儲 。
b.與NameNode交互,獲取文件的位置 。
c.與DataNode交互,讀取或?qū)懭霐?shù)據(jù) 。
NameNode: HDFS系統(tǒng)中的master,是主管 。
a.管理HDFS的名稱空間 。
b.管理數(shù)據(jù)塊(block)的映射信息 。
c.管理副本策略 。
d.處理客戶端請求 。
DataNode: 就是Slave 。
a.存儲實(shí)際的數(shù)據(jù)塊 。
b.執(zhí)行數(shù)據(jù)庫的讀/寫操作 。
Secondary NameNode: 并非NameNode的熱備,不能代替Namenode 。
a.輔助NameNode,分擔(dān)其工作 。
b.當(dāng)NameNode掛掉時,美國站群服務(wù)器,輔助它復(fù)活。
4.NameNode和DataNode
4.1.NameNode作用
NameNode在內(nèi)存中保存著整個文件系統(tǒng)的名稱空間和文件數(shù)據(jù)塊的地址映射。 整個HDFS可存儲的文件數(shù)量受限于NameNode的內(nèi)存大小。
1)NameNode元數(shù)據(jù)信息:文件名,文件目錄結(jié)構(gòu),文件屬性以及每個文件的塊列表。以及列表中的塊與塊所在的DataNode的之間的地址映射關(guān)系。這些數(shù)據(jù)會定時持久化到磁盤中。
2)NameNode文件操作:NameNode負(fù)責(zé)文件元數(shù)據(jù)的操作,DataNode負(fù)責(zé)處理文件內(nèi)容的讀寫,數(shù)據(jù)流不經(jīng)過NameNode。
3)NameNode副本:文件數(shù)據(jù)塊到底存放到哪里DataNode上,是由NameNode依據(jù)全局情況做出放置副本的決定。
4)NameNode心跳機(jī)制: NameNode會周期性的來自DataNode的狀態(tài)信息報告。如果10分鐘內(nèi)接受不到DN的心跳,NN則會認(rèn)為它宕機(jī)。
4.2 DataNode的作用
1)DN以數(shù)據(jù)塊的形式存儲文件 。
2)DN響應(yīng)Client的讀寫請求 。
3)DN周期性的向NN發(fā)送心跳信息 。
4)DN周期性的向NN匯報數(shù)據(jù)塊信息/緩存數(shù)據(jù)塊信息。
5.HDFS的副本機(jī)制和機(jī)架感知 5.1 HDFS文件副本機(jī)制
所有的文件都是以block塊的方式存放在HDFS文件系統(tǒng)中,作用如下:
5.1.一個文件可能大于整個磁盤容量,引入塊機(jī)制可以很好地解決這個問題。
5.2.使用塊作為文件存儲的邏輯單位可以簡化存儲子系統(tǒng)。
5.3.易于備份提高容災(zāi)能力,在hadoop2中,block的默認(rèn)大小為128M,可以在hdfs-site.xml配置文件中修改。每個block的默認(rèn)副本數(shù)為3,也可以在這個配置文件中改。
dfs.replication3dfs.block.size1342177285.2 機(jī)架感知
機(jī)架可以理解為存放一組主機(jī)的柜子,機(jī)架感知是HDFS的系統(tǒng)中有一個副本存放的策略。