HDFS基礎(chǔ)架構(gòu)與核心概念
HDFS架構(gòu)圖
HDFS核心概念
Active NameNode(文件系統(tǒng)的管理節(jié)點(diǎn))
一個(gè)集群中只有一個(gè)Master(Active NameNode)用來管理HDFS文件系統(tǒng)的命名空間(HDFS和Linux文件系統(tǒng)很類似也是通過文件和目錄來管理的,所有的文件和目錄層級(jí)關(guān)系也是樹狀結(jié)構(gòu),以 " / " 為根目錄)。
NameNode元數(shù)據(jù)文件(內(nèi)存中存儲(chǔ))
Edits編輯日志,客戶端對(duì)目錄和文件的寫操作首先被記錄到Edits中亭枷,如:創(chuàng)建文件,刪除文件等。
Fsimage:文件系統(tǒng)元數(shù)據(jù)檢查點(diǎn)保存了文件系統(tǒng)中所有的文件和目錄信息阳似,如:一個(gè)文件下有哪些子目錄,字文件铐伴,文件名撮奏,文件副本數(shù),文件由那些塊組成当宴。
NameNode定期將內(nèi)存中新增的edits和fsimage合并保存到磁盤中挽荡。
NameNode維護(hù)文件系統(tǒng)的所有文件和目錄,這些信息是以命名空間鏡像文件的形式(edits和fsimage)保存在磁盤中即供。但是為了快速訪問在集群運(yùn)行的時(shí)候定拟,會(huì)把命名空間里這些信息加載到內(nèi)存中。
NameNode管理的副本策略默認(rèn)為3個(gè)。
NameNode負(fù)責(zé)處理客戶端的讀寫請(qǐng)求青自。
standby NameNode
HDFS為了實(shí)現(xiàn)NameNode的高可用還會(huì)啟用一個(gè)備用節(jié)點(diǎn)standby NameNode株依,它是Active NameNode的備用節(jié)點(diǎn),會(huì)周期性同步Edits編輯日志延窜,定期合并fsimage與Edits至本地磁盤恋腕。當(dāng)Active NameNode出現(xiàn)故障時(shí)可以快速切換為新的Active。
DataNode(文件系統(tǒng)的工作節(jié)點(diǎn))
DataNode是HDFS分布式文件系統(tǒng)的工作節(jié)點(diǎn)負(fù)責(zé)客戶端的讀寫請(qǐng)求操作逆瑞,Slave工作節(jié)點(diǎn)可以啟動(dòng)多個(gè)荠藤,通過心跳機(jī)制定期向NameNode匯報(bào)運(yùn)行狀態(tài)和所有塊列表信息,在集群?jiǎn)?dòng)時(shí)DataNode向NameNode提供存儲(chǔ)的block塊列表信息获高。
Block數(shù)據(jù)塊(HDFS中最小的存儲(chǔ)單位)
文件寫入HDFS會(huì)被寫分成若干的block塊分別存儲(chǔ)到不同的DataNode上哈肖,數(shù)據(jù)塊大小固定,默認(rèn)大小為128M(HDFS在2.0版本之前默認(rèn)大小為64M)可自定義修改,如果一個(gè)塊的大小小于數(shù)據(jù)塊設(shè)置的大小念秧,則不會(huì)占用整個(gè)塊的空間淤井,默認(rèn)情況下每個(gè)block有三個(gè)副本。
Client(HDFS客戶端)
Client為HDFS的客戶端負(fù)責(zé)上傳文件的文件切分摊趾,與NameNode交互獲取文件元數(shù)據(jù)的信息币狠,與DataNode交互讀取或?qū)懭霐?shù)據(jù),管理HDFS砾层。
了解HDFS核心概念之后還需要明白的是HDFS不適合存儲(chǔ)小文件
因?yàn)樵獢?shù)據(jù)信息是存儲(chǔ)在NameNode內(nèi)存中的漩绵,內(nèi)存大小是有限的,NameNode存儲(chǔ)Block數(shù)目也是有限的,一個(gè)Block元信息大約消耗150Byte內(nèi)存肛炮,如果存儲(chǔ)1億個(gè)Block渐行,大約就需要20G的內(nèi)存。如果一個(gè)文件大小為10KB铸董,則一億個(gè)文件大小僅有1TB祟印,卻消耗了NameNode內(nèi)存大約20GB內(nèi)存(如果這樣的話顯然是不合理的)另外存儲(chǔ)小文件會(huì)消耗大量的磁盤尋道時(shí)間。