當前位置:學問君>學習教育>畢業論文>

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

學問君 人氣:2.86W

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