1. 數(shù)據(jù)塊(Block)
HDFS中的文件是以數(shù)據(jù)塊(Block)的形式存儲(chǔ)的扣草,默認(rèn)最基本的存儲(chǔ)單位是128 MB(Hadoop 1.x為64 MB)的數(shù)據(jù)塊。也就是說肖油,存儲(chǔ)在HDFS中的文件都會(huì)被分割成128 MB一塊的數(shù)據(jù)塊進(jìn)行存儲(chǔ)啡浊,如果文件本身小于一個(gè)數(shù)據(jù)塊的大小,則按實(shí)際大小存儲(chǔ)态蒂,并不占用整個(gè)數(shù)據(jù)塊空間。HDFS的數(shù)據(jù)塊之所以會(huì)設(shè)置這么大费什,其目的是減少尋址開銷钾恢。數(shù)據(jù)塊數(shù)量越多,尋址數(shù)據(jù)塊所耗的時(shí)間就越多鸳址。當(dāng)然也不會(huì)設(shè)置過大瘩蚪,MapReduce中的Map任務(wù)通常一次只處理一個(gè)塊中的數(shù)據(jù),如果任務(wù)數(shù)太少稿黍,作業(yè)的運(yùn)行速度就會(huì)比較慢疹瘦。HDFS的每一個(gè)數(shù)據(jù)塊默認(rèn)都有三個(gè)副本,分別存儲(chǔ)在不同的DataNode上巡球,以實(shí)現(xiàn)容錯(cuò)功能言沐。因此,若數(shù)據(jù)塊的某個(gè)副本丟失并不會(huì)影響對(duì)數(shù)據(jù)塊的訪問酣栈。數(shù)據(jù)塊大小和副本數(shù)量可在配置文件中更改
2. NameNode
NameNode是HDFS中存儲(chǔ)元數(shù)據(jù)(文件名稱险胰、大小和位置等信息)的地方,它將所有文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)目錄樹中矿筝,任何元數(shù)據(jù)信息的改變起便,NameNode都會(huì)記錄。HDFS中的每個(gè)文件都被拆分為多個(gè)數(shù)據(jù)塊存放窖维,這種文件與數(shù)據(jù)塊的對(duì)應(yīng)關(guān)系也存儲(chǔ)在文件系統(tǒng)目錄樹中榆综,由NameNode維護(hù)。NameNode還存儲(chǔ)數(shù)據(jù)塊到DataNode的映射信息陈辱,這種映射信息包括:數(shù)據(jù)塊存放在哪些DataNode上奖年、每個(gè)DataNode上保存了哪些數(shù)據(jù)塊。NameNode也會(huì)周期性地接收來自集群中DataNode的“心跳”和“塊報(bào)告”沛贪。通過“心跳”與DataNode保持通信陋守,監(jiān)控DataNode的狀態(tài)(活著還是宕機(jī)),若長(zhǎng)時(shí)間接收不到“心跳”信息利赋,NameNode會(huì)認(rèn)為DataNode已經(jīng)宕機(jī)水评,從而做出相應(yīng)的調(diào)整策略∶乃停“塊報(bào)告”包含了DataNode上所有數(shù)據(jù)塊的列表信息中燥。
3. DataNode
DataNode是HDFS中真正存儲(chǔ)數(shù)據(jù)的地方√临耍客戶端可以向DataNode請(qǐng)求寫入或讀取數(shù)據(jù)塊疗涉,DataNode還在來自NameNode的指令下執(zhí)行塊的創(chuàng)建拿霉、刪除和復(fù)制,并且周期性地向NameNode匯報(bào)數(shù)據(jù)塊信息咱扣。
4. SecondaryName
NodeSecondaryNameNode用于幫助NameNode管理元數(shù)據(jù)绽淘,從而使NameNode能夠快速、高效地工作闹伪。它并不是第二個(gè)NameNode沪铭,僅是NameNode的一個(gè)輔助工具。HDFS的元數(shù)據(jù)信息主要存儲(chǔ)于兩個(gè)文件中:fsimage和edits偏瓤。fsimage是文件系統(tǒng)映射文件杀怠,主要存儲(chǔ)文件元數(shù)據(jù)信息,其中包含文件系統(tǒng)所有目錄厅克、文件信息以及數(shù)據(jù)塊的索引赔退;edits是HDFS操作日志文件,HDFS對(duì)文件系統(tǒng)的修改日志會(huì)存儲(chǔ)到該文件中已骇。當(dāng)NameNode啟動(dòng)時(shí)离钝,會(huì)從文件fsimage中讀取HDFS的狀態(tài)票编,也會(huì)對(duì)文件fsimage和edits進(jìn)行合并褪储,得到完整的元數(shù)據(jù)信息,隨后會(huì)將新HDFS狀態(tài)寫入fsimage慧域。但是在繁忙的集群中鲤竹,edits文件會(huì)隨著時(shí)間的推移變得非常大,這就導(dǎo)致NameNode下一次啟動(dòng)的時(shí)間會(huì)非常長(zhǎng)昔榴。為了解決這個(gè)問題辛藻,則產(chǎn)生了SecondaryNameNode,SecondaryNameNode會(huì)定期協(xié)助NameNode合并fsimage和edits文件互订,并使edits文件的大小保持在一定的限制內(nèi)吱肌。SecondaryNameNode通常與NameNode在不同的計(jì)算機(jī)上運(yùn)行,因?yàn)樗膬?nèi)存需求與NameNode相同仰禽,這樣可以減輕NameNode所在計(jì)算機(jī)的壓力氮墨。