Hadoop使用lzo壓縮輸出

Hadoop處理大量的數據,如果期間的輸出數據、中間數據能壓縮存儲,對系統的I/O性能會有提升。

參考了網上不少資料,發現綜合考慮壓縮、解壓速度、是否支持split,目前lzo是最好的選擇。lzo最初在google code上託管,但後來轉移到github了,所以以github爲準。地址爲:
https://github.com/kevinweil/hadoop-lzo


步驟如下:

1. 安裝lzo
我的是centos,所以yum search lzo後,安裝對應版本的devel包。

2. 到github下載hadoop-lzo的tar包安裝
https://github.com/kevinweil/hadoop-lzo/downloads


準備條件:編譯hadoop-lzo得有gcc、ant

解壓後,到hadoop-lzo目錄下,運行:
ant compile-native tar

原無意外的話,就會生成hadoop-lzo-0.4.15.jar

3. 把hadoop-lzo-0.4.15.jar拷貝到hadoop的lib目錄下,此外把
hadoop-lzo/build/native/Linux-amd64-64/lib下的.a、.la、so等文件拷貝到hadoop的lib/native/Linux-amd64-64下,之後重啓hadoop


那麼就可以在程序中,把輸出結果通過lzo壓縮:
SequenceFileOutputFormat.setOutputCompressionType(job, CompressionType.BLOCK);
SequenceFileOutputFormat.setCompressOutput(job, true);
SequenceFileOutputFormat.setOutputCompressorClass(job, LzoCodec.class);


hadoop讀取這些文件時,會自動解壓。


hadoop上比較好的壓縮庫,都是native方式,配置起來挺麻煩的。
配置過程中,就老提示:Could not load native gpl library

文件該複製都複製了,最終的解決辦法是在eclipse中,右擊項目--build path,選擇libraries--點擊hadoop-lzo-0.4.15.jar,展開後,雙擊其下的:Native library location,選擇編譯好的hadoop-lzo的native文件所在路徑,我填的是:

hadoop-lzo/build/native/Linux-amd64-64/lib

發現壓縮後的文件大概爲原來的50%。

最後,附上官方的hadoop—lzo配置說明:
https://github.com/kevinweil/hadoop-lzo/blob/master/README.md
http://code.google.com/a/apache-extras.org/p/hadoop-gpl-compression/wiki/FAQ?redir=1


--------------------------------------------------------------------

補充:在red hat 4下,yum install的是1.0版本的lzo,要升級成ver 2的才行。下載rpm包安裝:
wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el4/en/x86_64/dag/RPMS/lzo-2.04-1.el4.rf.x86_64.rpm  
wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el4/en/x86_64/dag/RPMS/lzo-devel-2.04-1.el4.rf.x86_64.rpm

rpm -ivh lzo-2.04-1.el4.rf.x86_64.rpm
rpm -ivh lzo-devel-2.04-1.el4.rf.x86_64.rpm


詳情請參考這位xd的文章:
http://blog.csdn.net/kalaamong/article/details/7275185
發佈了62 篇原創文章 · 獲贊 1 · 訪問量 7331
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章