司雅楠++阮寧
摘要:大量的信息以數(shù)據(jù)的形式進行存儲和處理,如果能夠以最佳的方式存儲、訪問和分析所有產生的數(shù)據(jù),就可以創(chuàng)造出價值。面對如此海量的數(shù)據(jù),Hadoop文件系統(tǒng)(HDFS,Hadoop Distributed File System)展現(xiàn)出了它的優(yōu)越性。但是基于單一NameNode節(jié)點的HDFS文件系統(tǒng)表現(xiàn)出了單點失效、單點瓶頸和擴展性差幾個問題。為了解決單一NameNode成為整個集群性能瓶頸的問題,本文提出一種基于HDFS的分布式NameNode模型,并對分布式NameNode結構的總體設計進行介紹。
關鍵詞:HDFS;單一NameNode;分布式NameNode
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)06-0239-03
信息的數(shù)據(jù)化使得每天都有大量的數(shù)據(jù)產生,據(jù)統(tǒng)計現(xiàn)在人們創(chuàng)造與復制的數(shù)據(jù)量每兩年就會增加一倍。這種增長趨勢仍在加速,接下來幾年中,數(shù)據(jù)始終保持每年50%的增長速度。這些數(shù)據(jù)的數(shù)量之大種類之多,已經無法用傳統(tǒng)的數(shù)據(jù)處理工具加以分析,這也促進了新的數(shù)據(jù)處理技術應運而生。以云計算[1]為基礎的信息數(shù)據(jù)挖掘技術,可低成本、高效率地將這些數(shù)量巨大、結構多樣的終端數(shù)據(jù)存儲下來,實時地進行分析和計算。
大數(shù)據(jù)[2]和云計算兩個概念相輔相成,大數(shù)據(jù)中蘊含了豐富的信息和潛在價值,而云計算的出現(xiàn),幫助我們更好的對大數(shù)據(jù)中的價值進行分析,獲得新的認知、創(chuàng)造新的價值。Hadoop作為基礎云計算平臺已經得到了廣泛的應用。Hadoop[3]的兩大核心模塊是HDFS[4]和MapReduce[5],其中HDFS是Hadoop體系結構中的底層支持。
1 HDFS的基礎構架[6]
Hadoop的分布式文件系統(tǒng)(HDFS,Hadoop Distributed File System)作為Hadoop云平臺的核心組件,其主要負責海量數(shù)據(jù)的存儲工作。HDFS具有高容錯性,可以部署在廉價的機器之上,它允許自定義數(shù)據(jù)塊備份的數(shù)目,并且將同一數(shù)據(jù)塊的備份存放在不同機架中,以提高文件系統(tǒng)的可靠性。
HDFS文件系統(tǒng)采用了主/從(master/slave)結構,在集群中NameNode作為主節(jié)點,多個DataNode作為從節(jié)點??蛻舳耍╟lient)發(fā)起的讀寫請求會直接傳送給NameNode,由NameNode對數(shù)據(jù)文件進行重命名、打開、刪除等操作。NameNode還要實時的與DataNode進行數(shù)據(jù)交互。此外NameNode管理并維護上傳數(shù)據(jù)到HDFS中時產生的EditLog日志文件和FsImage文件系統(tǒng)映射表等元數(shù)據(jù)信息。大數(shù)據(jù)文件傳入文件系統(tǒng)后,首先進行預處理,被分割成固定大小的數(shù)據(jù)塊(默認為64M),然后這些數(shù)據(jù)塊存放在各個DataNode中。HDFS的體系結構如圖1所示。
1.1 NameNode
NameNode主要有四大功能。首先,它対元數(shù)據(jù)(連線1)和數(shù)據(jù)塊進行管理。其次, NameNode還可以將存儲在內存中的元數(shù)據(jù)持久化到硬盤中去,以提高安全性。再次,NameNode負責處理客戶端和DataNode的所提出的請求。最后,DataNode要向NameNode發(fā)送的心跳信息,NameNode通過心態(tài)信息對DataNode進行管理。
1.2 Secondary NameNode
Secondary NameNode并不是NameNode的備份,而是按照一定時間間隔保持文件系統(tǒng)元數(shù)據(jù)的快照。Secondary NameNode與NameNode保持通信(連線2),定時的到NameNode上獲取edit logs,并更新到自己的fsimage上,一旦它有了新的fsimage文件,它就會將其拷貝到NameNode中。待NameNode重啟時會就會使用這個新的fsimage文件,從而減少其重啟的時間。
1.3 DataNode
DataNode最主要的工作就是存儲數(shù)據(jù)塊。其次DataNode會執(zhí)行數(shù)據(jù)的流水線復制任務,數(shù)據(jù)存入文件系統(tǒng)內部后,默認被分成64M大的數(shù)據(jù)塊,數(shù)據(jù)塊以冗余存儲的形式備份在多個DataNode中(連線3),默認備份數(shù)為3。最后DataNode還會定期的向NameNode報告其存儲的數(shù)據(jù)塊列表(連線4)和發(fā)送心跳信息。
1.4 Client
Client作為HDSF的使用者,它可以對系統(tǒng)中的文件進行讀寫操作。Client不能直接與DataNode通信,需要先從NameNode中獲取文件對應數(shù)據(jù)塊的位置信息(連線5),通過位置信息找到相應的DataNode并進行數(shù)據(jù)的讀寫操作(連線6,7)。
2 基于單一NameNode的分布式文件系統(tǒng)
2.1 單一NameNode節(jié)點設計原則
HDFS采用主/從(master/slave)結構,一個HDFS集群中由一個NameNode和若干個DataNode組成。NameNode作為HDFS的主服務器部署在性能相對較高的機器上,主要負責管理文件系統(tǒng)中的元數(shù)據(jù),這消耗其大量的內存和I/O資源。所以NameNode上不存儲用戶的數(shù)據(jù),也不執(zhí)行計算任務。
2.2 單一NameNode模型的不足[7]
單一NameNode節(jié)點的構架避免了復雜的一致性問題,簡化了系統(tǒng)的結構。但隨著數(shù)據(jù)規(guī)模的發(fā)展,HDFS單一NameNode節(jié)點的構架在現(xiàn)如今的數(shù)據(jù)應用場景中,也表現(xiàn)出了一些不足之處,主要表現(xiàn)在以下幾個方面.
(1) 單點性能瓶頸問題
由于HDFS上所運行的MapReduce任務和其他應用不斷地增多,若在同一時間內對NameNode發(fā)出訪問請求的Client數(shù)量較大時,NameNode所承受的壓力也越來越大。另外,存小文件的數(shù)據(jù)不斷增多,小文件的數(shù)目增多不可避免的會引起元數(shù)據(jù)的膨脹,NameNode的內存大小成為制約文件系統(tǒng)整體性能的瓶頸。
(2) 單點失效問題
由于NameNode節(jié)點在整個hadoop集群中僅有一個,一旦該節(jié)點發(fā)生故障就會造成客戶端對文件進行操作時無法獲取到元數(shù)據(jù)信息,文件到數(shù)據(jù)塊的映射無法找到,整個HDFS集群無法正常工作,單一的NameNode節(jié)點就成為了HDFS集群的單一失效點(SPOF,Single Point of Failure)。為了解決單點失效的問題,HDFS的Secondary NameNode作為NameNode元數(shù)據(jù)信息的快照,待NameNode重啟后會就會使用Secondary NameNode中fsimage文件里的快照,將元數(shù)據(jù)信息恢復到NameNode故障前的狀態(tài)。但是NameNode重啟和元數(shù)據(jù)的恢復都需要一定的時間,影響了這個系統(tǒng)的實時性。
(3) 擴展性問題
單一NameNode存在擴展性方面的問題。首先NameNode節(jié)點內存的大小成為整個文件系統(tǒng)存儲規(guī)模的限制。元數(shù)據(jù)都存在放NameNode中,這樣做雖然加快了元數(shù)據(jù)的訪問效率,但是隨著HDFS系統(tǒng)規(guī)模的增大,數(shù)據(jù)塊的數(shù)量急劇增加,NameNode節(jié)點中元數(shù)據(jù)數(shù)量也相應的變大,當達到NameNode內存上限時NameNode節(jié)點內存的大小就制約了HDFS文件系統(tǒng)的規(guī)模。若只是通過簡單的增大數(shù)據(jù)塊大小來減小元數(shù)據(jù)的數(shù)量會增加文件系統(tǒng)的磁盤碎片。此外,隨著文件系統(tǒng)存儲文件數(shù)目的增加,元數(shù)據(jù)的數(shù)量也增大,單一NameNode節(jié)點的內存無法存放數(shù)量巨大的元數(shù)據(jù)信息。我們可以通過合并文件的方法來減少文件的數(shù)目從而減少元數(shù)據(jù)的數(shù)據(jù)量,但合并后文件的原始結構遭到了破壞。綜上所述,單一NameNode節(jié)點也對文件系統(tǒng)所存放文件數(shù)量的擴展產生了制約。
3 基于分布式NameNode的分布式文件系統(tǒng)
為了減輕NameNode的壓力,避免單一NameNode節(jié)點變成制約整個HDFS集群性能的瓶頸,本文提出基于分布式NameNode的HDFS文件系統(tǒng),集群里所有的NameNode節(jié)點共同完成元數(shù)據(jù)的存儲。
3.1 總體結構設計
在基于分布式NameNode節(jié)點的HDFS文件系統(tǒng)中,多個NameNode節(jié)點組成一個小型的分布式集群,各個NameNode對外提供一致的服務。集群內部設有一個Manager NameNode節(jié)點監(jiān)控NameNode節(jié)點的工作狀態(tài)。集群中還分別設有Manager NameNode和NameNode這兩種節(jié)點的備用節(jié)點以保證集群的高可用性。因此,分布式NameNode集群中共有四種不同類型的節(jié)點分別承擔不同的工作,其結構如圖2所示。
(1) Manger NameNode節(jié)點
Manger NameNode節(jié)點監(jiān)控和管理各個NameNode節(jié)點的工作狀態(tài),同時它本身也是一個NameNode節(jié)點,其具體工作任務如下:
1) 監(jiān)督集群中所有NameNode節(jié)點的工作情況。Manager NameNode通過NameNode節(jié)點定時發(fā)送的心跳信息來識別NameNode節(jié)點是否失效或者是否恢復工作,如果在指定時間段內沒有收到某個NameNode發(fā)送的心跳信息,則認為該節(jié)點發(fā)生故障無法正常工作。
2) 處理集群中的節(jié)點故障。當集群中出現(xiàn)故障節(jié)點時,Manger NameNode會啟動故障節(jié)點的后備節(jié)點Secondary NameNode替換該節(jié)點。
3) 轉發(fā)DataNode的狀態(tài)信息。DataNode將自己的狀態(tài)信息發(fā)送給Manger NameNode,再由Manger NameNode轉發(fā)給所有的NameNode節(jié)點。
(2) Secondary Manger NameNode節(jié)點
為了保證分布式NameNode集群的高可用性,需要有一個Secondary Manger NameNode節(jié)點,其作用類似于Secondary NameNode,當Manger NameNode節(jié)點出現(xiàn)故障無法正常工作時,Secondary Manger NameNode作為該節(jié)點的快照,幫助其盡快回復正常工作。
(3) NameNode節(jié)點
基于分布式NameNode節(jié)點的HDFS文件系統(tǒng)將元數(shù)據(jù)分散的存放在集群中各個NameNode節(jié)點上。集群中的NameNode節(jié)點分為三種,分別是Secondary Manger NameNode節(jié)點、Manger NameNode節(jié)點和NameNode節(jié)點。它們都需要完成普通NameNode節(jié)點的工作,同時又有各自特有的工作任務。在HDFS文件系統(tǒng)中它們需要協(xié)同完成元數(shù)據(jù)服務。
(4) Secondary NameNode節(jié)點
當Manger NameNode節(jié)點未在規(guī)定時間內收到NameNode節(jié)點發(fā)來的心跳信息時,則認為該NameNode節(jié)點發(fā)生故障,并選擇一個新的NameNode節(jié)點加載相關的元數(shù)據(jù)信息后,代替故障NameNode節(jié)點,加入到集群中。
(5) DataNode節(jié)點
負責具體的數(shù)據(jù)塊的存放。
3.2 基于分布式NameNode的分布式文件系統(tǒng)的優(yōu)點[8]
(1) 文件系統(tǒng)的可靠性增強
從兩個方面保證文件系統(tǒng)的高可靠性,首先,NameNode和DataNode都會定期的向Manger NameNode節(jié)點發(fā)送心跳信息,若在規(guī)定時間內沒有得到Manger NameNode節(jié)點的響應則認為其發(fā)生了故障,進而將心跳信息發(fā)送給Secondary Manger NameNode節(jié)點;其次,Secondary Manger NameNode節(jié)點也會定時的向Manger NameNode節(jié)點發(fā)送信息,在規(guī)定時間內沒有得到回復,則認為Manger NameNode節(jié)點發(fā)生故障隨即替代它工作。通過這兩種方式保證了集群里NameNode和DataNode節(jié)點中存放的最新信息不會丟失,從而增強了文件系統(tǒng)的可靠性。
(2) 故障節(jié)點的切換速度提升
Manger NameNode節(jié)點故障后可以在短時間內切換成Secondary Manger NameNode節(jié)點來替代,不會導致HDFS癱瘓。
(3) NameNode通信量減小
在單一NameNode節(jié)點的HDFS文件系統(tǒng)中,NameNode節(jié)點需要存放所有的元數(shù)據(jù)信息和接收DataNode發(fā)送的心跳信息。而本文提出得分布式NameNode節(jié)點模型,DataNode節(jié)點的狀態(tài)信息都發(fā)送給Manger NameNode節(jié)點,再由Manger NameNode節(jié)點發(fā)送給各個NameNode節(jié)點。只有當DataNode上發(fā)生數(shù)據(jù)塊變化時,才由DataNode直接與其對應的NameNode發(fā)送數(shù)據(jù)塊報告,這樣減少了他們之間的通行量也減輕了DataNode的通信壓力。如圖3所示:
(4) 提高了HDFS文件系統(tǒng)的擴展性
分布式NameNode的HDFS集群中有多個NameNode同時對外提供元數(shù)據(jù)服務,根據(jù)一定的元數(shù)據(jù)存放策略選擇相對應的NameNode節(jié)點進行元數(shù)據(jù)存儲。利用這種方式解決單一NameNode節(jié)點擴展性差的問題,從而提高了HDFS文件系統(tǒng)的服務性能。
4 結束語
隨著各種可佩戴計算設備的出現(xiàn),信息的數(shù)據(jù)化是的數(shù)據(jù)量日益增加。利用Hadoop技術來對大數(shù)據(jù)進行處理成為主流方式,這也使Hadoop中HDFS文件系統(tǒng)單一NameNode節(jié)點設計所存在的問題日益凸顯,本文提出了基于HDFS的分布式NameNode借點模型來解決基于HDFS的單一NameNode節(jié)點模型的不足之處。
本文介紹了HDFS的基本框架,以及單一NameNode節(jié)點的HDFS讀取數(shù)據(jù)的過程,以此來引出單一NameNode節(jié)點模型所存在的問題,并提出分布式NameNode節(jié)點模型的基本構架。通過分布式NameNode節(jié)點模型來解決單一NameNode節(jié)點模型所存在的不足,使HDFS文件系統(tǒng)有更好的擴展性。
參考文獻:
[1] 曹風兵. 基于Hadoop的云計算模型研究與應用[D]. 重慶:重慶大學計算機學院, 2011:5-14.
[2] 王元卓, 靳小龍, 程學旗. 網絡大數(shù)據(jù): 現(xiàn)狀與展望[J]. 計算機學報, 2013, 36(6): 1125-1138.
[3] Hadoop.[EB/OL][2015-02-13]. http://hadoop.apache.org/.
[4]王永洲. 基于HDFS的存儲技術的研究[D]. 南京郵電大學, 2013:13-17.
[5]李玉林, 董晶.基于Hadoop的MapReduce模型的研究與改進[J]. 計算機工程與設計, 2012, 33(8): 3110-3116.
[6] 李鑫. Hadoop框架的擴展和性能調優(yōu)[D]. 西安:西安建筑科技大學, 2012.
[7] 鄧鵬, 李玫毅, 何誠. NameNode單點故障解決方案研究[J]. 計算機工程, 2012, 38(21): 40-44.
[8] 楊帆. Hadoop平臺高可用性方案的設計與實現(xiàn)[D]. 北京:北京郵電大學, 2012.