基於Hadoop分佈式文件系統的單點問題的研究論文

學識都 人氣:2.85W

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分佈式文件系統的性能瓶頸的優化將是本人未來主要研究的內容。