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