王菊 徐董冬
摘要:隨著電商企業、互聯網+、智慧城市等新商業革命的發展和社會網絡的廣泛應用,帶動相關信息的數據量極速增長,從大量的數據中搜索潛在的有效、全面的信息,預測未來的發展趨勢顯得十分必要。數據量越大挖掘到的價值就越多,進而有助于支持決策。為了提高數據庫性能,改進數據庫查詢效率的同時采用數據壓縮技術對數據進行壓縮,減少文件所占存儲空間并保證在壓縮過程中不丟失信息。本文對Hadoop框架進行介紹,并對基于Hadoop的數據壓縮技術進行分析和研究,對壓縮算法進行比較及使用場景。
關鍵詞:Hadoop 壓縮 壓縮算法
中圖分類號:TP333 文獻標識碼:A 文章編號:1007-9416(2016)08-0094-02
近年來文本、聲音、圖像等各類信息數據量迅速增長,而人們對數據的研究往往關注于存儲效率、存儲量、安全性、完整性和帶寬等方面,產生的數據會有一定的冗余,而冗余數據也占用了磁盤空間和網絡帶寬,隨著數據量的增大,數據的存儲效率和存儲量受到限制,導致磁盤和帶寬利用率降低。信息技術的普及使產生的數據量持續增長,數據存儲的硬件管理愈加復雜,如果不對海量的數據進行處理就難以高效、全面的應用。對大數據的處理優化方式有很多種,本文主要介紹在使用Hadoop平臺中對數據進行壓縮處理來提高數據處理效率。
Hadoop作為比較通用的海量數據處理平臺,提供了一些壓縮方法的支持,如果期間的輸出數據、中間數據能壓縮存儲,對系統的I/O性能有所提升。在使用壓縮方面,主要考慮壓縮速度和壓縮文件的可分割性。Hadoop實現了HDFS分布式文件系統和MapReduce計算的核心框架,以一種可靠、高效、可伸縮的方式進行數據處理。構建在Hadoop系統之上的數據分析型應用也越來越多,在數據分析型應用中,數據壓縮減少了數據存儲量,進而減少了查詢中的磁盤I/O量和網絡數據傳輸量。
1 Hadoop框架
Hadoop是一個開源分布式計算平臺,能夠對大量數據進行分布式處理的軟件框架。Hadoop是以一種高效、可靠、可伸縮的方式進行處理的,它維護多個工作數據的副本確保能夠對處理失敗的節點重新分布;由于其以并行方式工作,通過并行處理加快處理速度;而且能夠處理PB級數據。此外,Hadoop依賴于社區服務器,成本較低。以Hadoop分布式文件系統HDFS和分布式計算框架MapReduce為核心。在分布式集群中,HDFS存取MapReduce需要的數據,MapReduce負責調度與計算為用戶提供了底層細節透明的分布式基礎設施。
1.1 HDFS概述及體系架構
HDFS是Hadoop分布式計算中數據存儲和管理的基礎,一個具有高度容錯性的分布式文件系統,是基于流式數據訪問和處理超大文件的需求而開發的,可以部署在廉價的硬件設備上。適合存儲信息量非常大的文件,并且具備對數據讀寫的高吞吐量。但是由于Namenode內存大小限制,不適合存儲大量小文件,而且HDFS不適于在數據需要經常修改的情況。
Block:將一個文件進行分塊,通常是64M。
NameNode:管理數據塊映射,處理客戶端的讀寫請求,配置副本策略,保存整個文件系統的目錄信息、文件信息及分塊信息。
SecondaryNameNode:分擔NameNode的工作量,保存對元數據信息的備份。
DataNode:分布在廉價的設備上,用于存儲數據塊,提供具體的數據存儲服務,執行數據塊的讀寫操作。
1.2 MapReduce概述及處理框架
MapReduce是一個從海量源數據提取分析元素并返回結果集的編程模型,可以進行大量數據的計算任務可以被分解為多個子任務,這些子任務相對獨立,相互之間不會有影響,可以并行處理,處理完這些子任務后,任務處理完成。可解決海量數據的處理問題:如:Top K、頻率統計、倒排索引構建(用于關鍵詞搜索)等問題。
2 壓縮算法介紹
Hadoop可自動識別壓縮格式,壓縮文件有相應的壓縮格式的擴展名(如gz、bz2、lzo等),Hadoop會根據壓縮格式的擴展名自動選擇相對應的解碼器來解壓數據,該過程由Hadoop自動處理。一般來說,根據應用的具體情況來決定所使用的壓縮格式,如速度更快、空間最優、壓縮比高等不同策略,通過具有代表性的數據集進行測試,找到最佳方案。
Gzip壓縮(*.gz):Hadoop中內置支持的一種壓縮方式,該壓縮方式在Linux的開發人員和管理員中使用的比較廣泛,壓縮比較高,壓縮/解壓速度較快。在應用中處理Gzip格式的文件就和直接處理文本一樣。Gzip壓縮有一定的局限性,由于其算法本身的原因,無法對Gzip壓縮文件進行分塊。
Bzip2壓縮(*.bz2):支持分塊,具有很高的壓縮率,Linux系統下自帶Bzip2命令。對于相同文件,壓縮后尺寸總小于Gzip的壓縮結果,但壓縮所用時間更長,也就是占用CUP使用率會更多,因此壓縮/解壓速度慢,不支持native,適合對速度要求不高但需要較高壓縮率的時候,可作為MapReduce作業的輸出格式,并對將來的使用頻率不高的數據進行壓縮存檔。
LZO壓縮(*.lzo):基于Block分塊,一個大的文件(在Hadoop上可能會占用多個Block塊),就可以由多個MapReduce并行來進行處理;壓縮/解壓速度快。LZO的壓縮比沒有Gzip高,不過由于其前2個特性,在Hadoop上使用LZO還是能整體提升集群的性能的,且能準確還原壓縮后的數據。使用該壓縮需要在Hadoop集群中安裝LZO庫。
Hadoop帶有三種壓縮格式:Default、Gzip和Bzip2。Gzip是在Linux系統中經常使用用的文件以節省磁盤空間,還可以和tar命令一起構成Linux操作系統中比較流行的壓縮文件格式。Default和Gzip是對DEFLATE算法(LZ77和Huffman結合的算法)的實現,對要壓縮的文件首先使用LZ77算法的一個變種進行壓縮,對得到的結果在使用中Huffman編碼的方法進行壓縮。Bzip2能夠高效的完成文件數據的壓縮,傳送文件前,可以先用Bzip2打包壓縮文件,以減少傳送時間,提高效率。LZO是一種實時無損壓縮算法,在保證實時壓縮速率的同時提供適中的壓縮率,Hadoop中的LZO不是自帶的,如果要支持LZO,需要另外安裝配置。
3 算法分析
數據壓縮的性能指標:壓縮/解壓速度、壓縮率、壓縮時間。壓縮率衡量壓縮空間的主要指標,而壓縮時間是衡量數據壓縮性能的一個重要指標。對前文介紹的三種算法進行測試分析,壓縮率=壓縮后數據大小/原始數據大小,壓縮速度=原始數據大小/壓縮時間。
在文件量和設備同等的條件下,Bzip2實現空間最優壓縮,適合分布式存儲的應用;LZO是最快速度壓縮,適合分布式計算的應用;Gzip居于二者之間,所以根據不同的需求選擇不同的壓縮方式。
4 結語
本文簡要介紹了當前大數據的增長趨勢及優化數據存儲方面的主要措施,在大數據環境中,數據壓縮是改善處理性能的重要方式之一,壓縮能夠減少數據占用的存儲空間,進而減少數據處理過程的I/O量。對Hadoop的核心模塊HDFS和MapReduce及其各自的運行原理進行研究,并對Hadoop常用的三種壓縮算法進行研究,并通過測試、比較、分析,得出一個壓縮算法使用的通用策略。
參考文獻
[1]朱珠.基于Hadoop的海量數據處理模型研究和應用[D].北京:北京郵電大學,2008.
[2]崔杰,李陶深,蘭紅星.基于Hadoop的海量數據存儲平臺設計與開發[J].計算機研究與發展,2012,49(S1):12-18.
[3]古跟強.云存儲中數據壓縮技術的研究[D].云南:云南大學,2013.
[4]向麗輝,繆力,張大方.壓縮對Hadoop性能影響研究[J].計算機工程與科學,2015,37(2):207-212.
[5]郝樹魁.Hadoop HDFS和MapReduce架構淺析[J].郵電設計技術,2012(7):37-42.
[6]李明,楊雷,黎山峰.不同壓縮算法性能的研究[J].通信技術,2009,42(4):175-177.
[7]王意潔,孫偉東,周松.云計算環境下的分布存儲關鍵技術[J].軟件學報,2012,23(4):962-986.
[8]翟巖龍,羅壯,楊凱.基于Hadoop 的高性能海量數據處理平臺研究[J].計算機科學,2013,40(3)100-103.
[9]Amrita Upadhyay,Pratibha R. Balihalli.Deduplication and Compression Techniques in Cloud Design.IEEE International Systems Conference,2011.