基於Hadoop分散式檔案系統的單點問題的研究論文

才智咖 人氣:2.84W

1 引言

基於Hadoop分散式檔案系統的單點問題的研究論文

如今網路的飛速發展,資料量的增多,這就要求資料庫能夠具有處理超大規模資料的能力。Hadoop分散式平臺的出現,很好地解決了處理海量資料的難題。Hadoop叢集架構有兩個核心的設計,分別是HDFS(Hadoop Distributed FileSystem)和MapReduce。由於HDFS只有一個元資料服務器NameNode,導致HDFS存在單點故障,單點記憶體不足等問題。本文在分析研究HDFS單點問題的基礎上,針對單點記憶體瓶頸問題,提出了一種新型的上層歸檔檔案系統,用來優化海量小檔案的處理,可有效地解決單點記憶體瓶頸問題。

2 HDFS架構

Hadoop分散式檔案系統(HDFS)是Hadoop分散式平臺的一個核心元件,其設計目的是為了解決超大檔案儲存難題。HDFS是由一個主節點和多個子節點構成的主從結構。主節點被稱為名稱節點(NameNode),子節點被稱為資料節點(DataNode)。

名稱節點主要負責管理分散式檔案系統中的元資料資訊,處理使用者檔案訪問操作請求等。而被上傳到Hadoop分散式檔案系統中的大資料則儲存在資料節點中。通過心跳機制,每隔一段時間資料節點與名稱節點進行資訊互動。

Hadoop分散式檔案系統包含名稱節點、資料節點、資料塊、資料包等元件。

名稱節點(NameNode)是HDFS的`主節點,負責管理並維護整個分散式檔案系統的元資料資訊,即:FSImage資訊和EditLog資訊。NameNode又決定了大資料檔案與資料塊之間的對映,資料塊與資料節點之間的對映,處理客戶端發來的檔案操作訪問請求。

資料節點(DataNode)主要負責儲存資料檔案,並且每隔一段時間向主節點發送儲存資料對映列表。

資料塊(Data Block)。分散式檔案系統儲存的資料都儲存在資料塊中。上傳的資料檔案首先被分割成預設大小64MB的資料塊,然後檔案以資料塊的形式存放在不同的DataNode節點上,是分散式檔案系統儲存資料的基本單位。為了防止資料塊丟失,每塊預設複製三塊,其中兩個資料塊儲存在一個機架中,另一個數據塊則被儲存在其他的機架中,大大提高了HDFS資料的可用性。

資料包(Data Packet)。在執行寫操作時,需要將上傳的資料先儲存在本地目錄中,待累計到系統規定值後才將資料一次寫入到Hadoop分散式檔案系統中。這樣,每次上傳的資料稱為一個數據包。

3 NameNode單點問題分析

3.1 單點故障

單點故障是指引起系統整體失效的部件,當該部件失效時,會造成整個系統無法工作。Hadoop分散式檔案系統由一個主節點和多個子節點構成的。NameNode節點負責管理和維護所有的名稱空間和元資料資訊,名稱節點主要負責管理分散式檔案系統中的元資料資訊,處理使用者檔案訪問操作請求等。一旦發生主節點故障會使整個系統無法正常工作,這對於使用者來說是災難性的。

3.2 效能瓶頸

NameNode節點主要負責管理並維護整個分散式檔案系統的元資料資訊,處理使用者檔案訪問操作請求。每次使用者發出檔案訪問操作請求時,NameNode節點都需要響應客戶端的請求。由於HDFS僅有一個名稱節點,當大量客戶端同時發出檔案訪問操作請求,單一的名稱節點無法及時一一做出響應,這必然會對HDFS正常執行造成嚴重的影響,是HDFS的效能瓶頸。

3.3 記憶體瓶頸

NameNode節點中儲存了整個系統的名稱空間,負責管理並維護整個分散式檔案系統的元資料資訊,即:FSImage資訊和EditLog資訊。對於每個上傳的檔案,NameNode節點會為其自動生成相應的元資料資訊,而這些元資料資訊會佔用少許的主節點記憶體空間。HDFS適合儲存大資料檔案,一般情況下,NameNode節點儲存的元資料資訊不會對整個Hadoop叢集造成影響。上傳檔案後,使用者更多的是與資料節點進行訪問互動,不會對訪問效能造成影響。然而使用者選擇上傳海量的小檔案時,元資料節點需要為每個小檔案生成對應的元資料資訊,這勢必對NameNode單點記憶體效能造成影響,從而對整個Hadoop叢集的擴充套件性造成影響。一般,當用戶上傳小檔案數量達到一億,相應的元資料資訊約佔主節點20G的儲存空間。若上傳的小檔案以指數級增長,HDFS叢集將不足以支援海量檔案的儲存。同樣,NameNode記憶體瓶頸嚴重製約了叢集的擴充套件。

4 對小檔案儲存優化的實現

上傳小檔案前,首先對海量小檔案進行預處理,將本地目錄中需要處理的小檔案寫入HashMap集合中,同時通過格式轉換生成檔案流式集合,其中小檔案檔名作為key,檔案內容作為value。然後以SequenceFile作為容器,再將HashMap中儲存的海量小檔案進行歸檔合併成一個大檔案。最後,將合併後的大檔案上傳Hadoop伺服器序列化儲存在HDFS中,從而緩解了NameNode節點記憶體瓶頸問題。

SmallFilesWrite類中,成員變數有兩個,就是String型別的靜態成員變數SOURCE_PATH和TARGET_PATH,SOURCE_PATH變量表示源路徑,即預上傳檔案本地目錄路徑。TARGET_PATH表示目標路徑,即上傳到指定Hadoop分散式檔案系統路徑。成員方法主要有readFiles方法、file2Bytes方法和main方法。

5 結論

本文針對Hadoop分散式檔案系統的單點記憶體瓶頸問題,提出了採用小檔案歸併的優化演算法。根據Hadoop儲存資料特點,利用小檔案合併大檔案,可有效減少元資料的生成,解決了單點記憶體瓶頸問題。在Hadoop分散式檔案系統單點記憶體瓶頸優化的基礎上,對Hadoop分散式檔案系統的效能瓶頸的優化將是本人未來主要研究的內容。