劉涌+裴春梅+韓偉+高震宇
摘要:Hadoop的文件系統(tǒng)HDFS(Hadoop Disttributed Filesystem)是一種分布式文件系統(tǒng),它利用多個商用硬件構(gòu)成存儲集群,利用namenode進行數(shù)據(jù)的存儲控制,具有支持超大文件、存儲靈活、可靠性高等特點,在面對大量數(shù)據(jù)存儲的時候,能夠高效地工作,但在處理大量小數(shù)據(jù)時、需要進行低延遲數(shù)據(jù)訪問時和需要多用戶訪問寫入時仍存在一定的不足。總之,HDFS技術(shù)在市場潛力巨大的同時,還存在很多可以改善討論的地方,具有較高的研究價值。
關(guān)鍵詞:Hadoop;HDFS;block;namenode
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2018)01-0007-02
1 概述
隨著人們工作生活中數(shù)據(jù)量的不斷加大,個人電腦中單機存儲的體積也在不斷增大,與之相對應(yīng)的,數(shù)據(jù)中心的數(shù)據(jù)壓力也在成倍增長;要存儲這些超大文件,可以對數(shù)據(jù)進行分區(qū)并存儲到網(wǎng)絡(luò)中若干單獨的計算機上,管理網(wǎng)絡(luò)中多臺計算機存儲的文件系統(tǒng)稱為分布式文件系統(tǒng)(Distributed Filesystem)。Hadoop的分布式系統(tǒng)稱為HDFS,即Hadoop Distributed Filesystem。
HDFS以流式數(shù)據(jù)訪問模式來存儲超大文件,即一次寫入,多次讀取的方式存取數(shù)據(jù)最佳:數(shù)據(jù)集通常由數(shù)據(jù)源生成或復(fù)制而成,接著長時間在此數(shù)據(jù)集上進行各種分析,這個數(shù)據(jù)源的寫入總是僅在文件的末尾添加數(shù)據(jù),不支持多源寫入(以目前的技術(shù),即使實現(xiàn)任意位置寫入等功能,效率也比較低)。Hadoop是設(shè)計運行在民用硬件(普通家用電腦)的集群上的,因此節(jié)點的故障率相對于昂貴的專用硬件較高,HDFS的作用就是當(dāng)節(jié)點發(fā)生故障時,讓一般用戶察覺不到明顯的中斷。
2 HDFS數(shù)據(jù)塊
數(shù)據(jù)塊(block)是磁盤讀寫數(shù)據(jù)的最小單位,文件系統(tǒng)通過格式化硬盤,構(gòu)造特有的磁盤塊來管理磁盤存儲,通常文件系統(tǒng)塊為幾k字節(jié)(Byte),而磁盤塊為512字節(jié),常見的Windows服務(wù)器必須安裝在NTFS文件系統(tǒng)上,就是因為盡在這種文件系統(tǒng)上才支持服務(wù)器對磁盤的管理。HDFS也有塊的概念,默認為64MB,與常規(guī)文件系統(tǒng)類似,HDFS也將多個塊組合作為獨立的存儲單元(chunk),不同的是,當(dāng)存儲文件小于塊大小時,不會獨占整個塊存儲空間。
之所以HDFS中的塊要大一些,是為了節(jié)省尋址開銷:眾所周知,在單機上頻繁進行硬盤讀寫操作后,容易產(chǎn)生磁盤存儲碎片,進而降低計算機整體運算速度,磁盤碎片整理的過程,其實質(zhì)是將散亂存儲的數(shù)據(jù),整理到磁盤相對集中的區(qū)域,從而減少磁頭尋址時間;同樣的,當(dāng)單位數(shù)據(jù)塊較大時,磁盤讀取數(shù)據(jù)的效率也會明顯提高。假設(shè)尋址時間固定為10ms,傳輸速率為100MB/s,為了使尋址時間占傳輸時間的1%,應(yīng)將塊大小設(shè)置為100MB,即1s內(nèi),首先用1/100s尋址,之后開始傳輸,由于數(shù)據(jù)塊有100MB,因此在傳輸完畢前無需再次尋址,這樣,就實現(xiàn)了1:100的高效傳輸,而通常情況下,HDFS也是使用128MB的塊設(shè)置。當(dāng)然,塊的大小也不是越大越好,MapReduce中map任務(wù)每次只調(diào)用一個塊進行處理,當(dāng)map任務(wù)數(shù)小于節(jié)點數(shù)量時,會造成大量節(jié)點閑置,反而降低了整體的處理速度。
利用這樣的塊結(jié)構(gòu),HDFS允許文件的大小大于網(wǎng)絡(luò)中任意一個磁盤的空間,因為文件的所有塊并不需要保存在一個磁盤上;其次,這樣的設(shè)計也使得存儲管理變得更加容易,由于單位塊的大小是固定的,文件管理系統(tǒng)很容易計算磁盤能夠容納多少塊,同時,每個塊只存儲一部分數(shù)據(jù),而諸如文件權(quán)限等信息不需要與塊一同存儲,這樣,系統(tǒng)就能夠單獨管理這些信息;在容錯性方面,塊結(jié)構(gòu)能夠有效實現(xiàn)數(shù)據(jù)的備份,HDFS默認將每個塊復(fù)制到三臺獨立的設(shè)備上,確保在設(shè)備發(fā)生故障,導(dǎo)致某個塊不可用時,從其他設(shè)備讀取其副本,保證數(shù)據(jù)的完整性。
3 namenode
HDFS中存在一個namenode(管理者)和多個datanode(工作者),其中namenode負責(zé)管理文件系統(tǒng)的命名,記錄所有文件和目錄,即永久存在于磁盤的命名空間鏡像文件和編輯日志文件,同時,它還負責(zé)臨時保存塊的位置信息??蛻敉ㄟ^文件系統(tǒng)接口訪問數(shù)據(jù),其實質(zhì)是在與namenode和datanode進行交互。
Datanode是文件系統(tǒng)的工作節(jié)點,它就像是人們的末梢神經(jīng)一樣,為各項感知提供數(shù)據(jù),而namenode就好像是人們的大腦,對神經(jīng)的反饋進行綜合處理:datanode根據(jù)需要存儲并檢索數(shù)據(jù)庫,定期向namenode發(fā)送存儲塊的列表,而namenode負責(zé)記錄如何重建文件。namenode一旦損壞,整個文件系統(tǒng)將癱瘓,Hadoop為此提供兩種容錯機制:
1) 備份機制。
備份組成文件系統(tǒng)元數(shù)據(jù)持久狀態(tài)的文件:Hadoop可以同步將持久狀態(tài)寫入本地磁盤的同時,寫入一個遠程的網(wǎng)絡(luò)文件系統(tǒng)(NFS)
2) 輔助namenode
在另一臺單獨的計算機上運行一個輔助namenode,定期編輯日志合并命名空間鏡像,以防止編輯日志過大,它需要消耗與namenode同等的CPU和內(nèi)存資源進行合并操作,并保存合并后的命名空間鏡像副本。
4 高可用性
通過以上兩種方法,依舊無法實現(xiàn)HDFS的高可用性,因為namenode是唯一存儲元數(shù)據(jù)與文件到數(shù)據(jù)塊映射的單元,當(dāng)namenode失效時,所有客戶端均無法實現(xiàn)讀寫等操作。直到管理員建立一個新的namenode,并將命名空間的映像倒入內(nèi)存,重新編輯日志,收到大量的來自datanode的數(shù)據(jù)塊報告并退出安全模式后,系統(tǒng)才能夠恢復(fù),而對于大型數(shù)據(jù)集群來說,這種冷啟動需要30分鐘甚至更長的時間。
實際工作中,namenode失效的可能性非常低,Hadoop的2.X發(fā)行版本針對上述問題也在HDFS增加了對高可用性(HA)的支持,并做了如下修改:
1) namenode之間通過高可用的共享存儲實現(xiàn)編輯日志的共享,當(dāng)備用namenode接管之后,將共享全部編輯日志,以實現(xiàn)與活動的namenode同步,并繼續(xù)讀取活動中的namenode的最新信息。
2) datanode向兩個namenode同時發(fā)送報告。
3) 客戶端用特定的透明機制處理namenode的失效問題。
由于最新的編輯日志和數(shù)據(jù)塊映射信息在內(nèi)存條內(nèi),在活動的namenode失效后,備用namenode能夠在幾十秒內(nèi)實現(xiàn)任務(wù)接管,實際過程中,為了等待系統(tǒng)確定namenode是否真的失效,失效時間大約在1分鐘左右。
5 結(jié)束語
HDFS(Hadoop Disttributed Filesystem)的以上種種表明,這是一種行之有效的大數(shù)據(jù)文件存儲系統(tǒng),符合大數(shù)據(jù)的基本存儲需求,能夠?qū)崿F(xiàn)數(shù)據(jù)的負載均衡存儲、存儲方法方便簡潔、可用性高、容錯性強。目前HDFS還存在包括上文所述在內(nèi)的一些問題,部分問題解決的意義不大,部分問題仍需討論,但在可見的未來內(nèi),HDFS將持續(xù)保持自己的活力,并更加得到市場的認可。
參考文獻:
[1] 張子凡. OpenStack部署實踐[M].北京:人民郵電出版社,2014:1-364.
[2] 鮑亮,李倩. 實戰(zhàn)大數(shù)據(jù)[M].北京:清華大學(xué)出版社,2014:1-327.
[3] 吳萍,朱晴婷. 算法與程序設(shè)計基礎(chǔ)(Python版)[M].北京:清華大學(xué)出版社,2015:30-270.endprint