王煜驄
(四川大學計算機學院,成都 610065)
Hadoop日志壓縮算法的研究與實現(xiàn)
王煜驄
(四川大學計算機學院,成都 610065)
Hadoop集群由于規(guī)模增大、運行時間增長使得日志量持續(xù)增加,導致存儲壓力過大。為了節(jié)約存儲資源,研究并實現(xiàn)一種高效的Hadoop日志無損壓縮算法。實驗結(jié)果表明,該壓縮算法與傳統(tǒng)的LZW壓縮算法的壓縮比基本相同,但壓縮和解壓操作的耗時均小于LZW壓縮算法且受文件大小影響更小。
Hadoop;日志;壓縮
Hadoop[1]作為目前較為流行的分布式計算框架,已被廣泛地應用于大數(shù)據(jù)處理。為了方便用戶使用及調(diào)試,Hadoop會將其自身的運行狀況以日志的形式寫入磁盤,主要包括:各類守護進程的運行日志、MapReduce作業(yè)的運行日志等。當Hadoop集群規(guī)模增大及其使用時間的增長,日志的產(chǎn)生量會急劇增加,從而對磁盤存儲造成極大的壓力。
為了解決 Hadoop日志過大的問題,本文對Hadoop的日志結(jié)構(gòu)進行了分析,并根據(jù)其特點,設計并實現(xiàn)了一種高效的無損壓縮算法,對日志進行壓縮以節(jié)省存儲資源,同時保證解壓縮過程的高速性。
Hadoop日志信息通過Log4j[2]產(chǎn)生,其具體格式為%d{ISO8601}%p%c:%m%n,具體參數(shù)說明如下:
●%d:日志時間點的日期或時間,默認格式為ISO8601
●%p:級別,包括:DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
●%c:所屬的類,通常為所在類全名
●%m:代碼中輸出的信息
●%n:回車換行符
由此可知,Hadoop日志信息的具體結(jié)構(gòu)如下:
日志產(chǎn)生時間+空格+級別+空格+所在類全名+冒號+空格+代碼輸出信息+回車換行符
因此,本文將該日志信息切分為4部分:日志產(chǎn)生時間、級別、所在類全名、代碼輸出信息。其中,日志產(chǎn)生時間又可分為日志產(chǎn)生日期與具體時間,因此又將日志產(chǎn)生時間分為兩塊:日志產(chǎn)生日期與日志產(chǎn)生時間(精確到毫秒)。
通過分析Hadoop具體的日志,發(fā)現(xiàn)日志產(chǎn)生日期、優(yōu)先級、所在類全名重復率較高,因此,本文最終采用基于字典的方式實現(xiàn)Hadoop日志壓縮算法。
2.1 壓縮算法實現(xiàn)
本文提出的壓縮算法基于字典方式實現(xiàn),建立了三張字典:mDate(用于存放日志產(chǎn)生時間)、mLevel(用于存放日志級別)、mName(用于存放所在類全名)。每張字典的表項為一個序號,用于區(qū)分與檢索。
壓縮算法的具體執(zhí)行流程如圖1所示,首先判斷每一行中的數(shù)據(jù)是否為日志信息,若是則對其進行解析并進行切分,否則直接將其寫入緩存;然后判斷字典中是否已包含切分得到的值,若有則從字典中提取相應序號進行編碼,否則分配新序號進行編碼并更新字典;接著將編碼后的內(nèi)容寫入緩存,若文件已壓縮完成,則先將字典寫入文件頭部,然后再寫入緩存中的壓縮內(nèi)容。
圖1 壓縮算法執(zhí)行流程圖
2.2 解壓算法實現(xiàn)
解壓算法的具體執(zhí)行流程如圖2所示,解壓時首先讀取相應的三張字典(mDate、mLevel、mName),并將其加載進入內(nèi)存,然后判斷讀入的每一行是否符合日志消息格式,若是,則根據(jù)字典將壓縮后內(nèi)容中的序號替換為其在字典中對應的內(nèi)容后寫入解壓縮文件,否則直接將該行寫入解壓縮文件。
本文實驗環(huán)境包含一臺主機,其CPU為Intel Core i5-3230M CPU 2.60GHz,內(nèi)存為4GB,系統(tǒng)為64位Window7版。本文設計的壓縮算法利用了Java編程語言實現(xiàn),JDK版本為1.7,堆大小配置如下:-Xms512m–Xmx512。
圖2 解壓算法執(zhí)行流程圖
為了測試該算法性能,本文將其與傳統(tǒng)的LZW壓縮算法[3]進行了比較,具體做法是:利用兩種算法分別對6個不同大小的Hadoop日志文件進行壓縮和解壓,記錄了二者壓縮和解壓分別消耗的時間,并對比了二者的壓縮比 (壓縮比=壓縮后文件大小/壓縮前文件大?。黝悳y試分別進行了6次實驗,結(jié)果取其平均值。
本文提出的算法和LZW算法對不同文件大小的壓縮比對比結(jié)果如圖3所示,由結(jié)果可見,兩種算法對于不同大小的Hadoop日志文件的壓縮比基本相同。
本文提出的算法和LZW算法對不同文件大小的壓縮、解壓操作耗時對比結(jié)果如圖4所示,LZW壓縮算法隨著日志文件的增大,壓縮及解壓操作耗時均會線性增長,而本文提出的壓縮算法壓縮及解壓操作均較為快速,同時,日志文件增大時,壓縮及解壓操作基本不受影響,耗時變化不大。
本文首先研究了Hadoop日志的組成結(jié)構(gòu),然后對其日志特點進行了分析,最后基于字典方式設計并實現(xiàn)了一種高效的Hadoop日志無損壓縮算法。通過測試可知,該算法壓縮及解壓速度快于LZW壓縮算法,且壓縮比與其基本相同,同時Hadoop日志文件增大對壓縮、解壓縮過程的耗時影響較小。
圖3 本文算法與LZW算法的壓縮比對比圖
圖4 本文算法與LZW算法的解、壓縮平均耗時對比圖
[1]Apache Hadoop Home Page[EB/OL].[2017-1-27].http://hadoop.apache.org.
[2]Apache Log4j Home Page[EB/OL].[2017-1-27].http://logging.apache.org/log4j/1.2/.
[3]Welch T A.A technique for high-performance data compression[J].Computer,1984,6(17):8-19.
Research and Implementation of Hadoop Log Compression Algorithm
WANG Yu-cong
(College of Computer Science,Sichuan University,Chengdu 610065)
The increased size and run-time growth of Hadoop cluster make the log data continued to increase,which leads to the large storage pressure.In order to save storage resources,studies an efficiently lossless compression algorithm of Hadoop log.The results show that the compression algorithm proposed is basically the same as the compression ratio of LZW compression algorithm,but the compression,decompression operation time of the proposed algorithm is much shorter than the LZW compression algorithm,and the proposed algorithm is less affected by the file size.
Hadoop;Log;Compress
1007-1423(2017)09-0134-03
10.3969/j.issn.1007-1423.2017.09.031
王煜驄(1991-),男,江蘇無錫人,在校學生,研究方向為分布式處理
2017-03-09
2017-03-15