Hadoop支持好幾種壓縮算法,包括: git
Bzip2 github
Gzip 算法
DEFLATE shell
Hadoop提供這些算法的Java實現,因此能夠很方便的經過FileSystem API來進行文件的壓縮和解壓縮。這些壓縮算法都有一個缺陷,那就是文件不能被分片(splittable)。這就意味着採用這些算法進行壓縮的文件須要讀取整個文件才能將文件解壓縮。這對MapReduce會產生致命的影響,由於這意味着一個壓縮文件必須由一個map來處理。這也正是LZO優越之處,LZO壓縮的文件是可分片的(這要感謝Hadoop社區的不懈努力)。 apache
LZO的安裝與配置步驟以下: oop
1.從https://github.com/kevinweil/hadoop-lzo下載Hadoop-LZO(注意Hadoop-LZO有兩個版本,分別由Cloudera和Twitter維護),通常建議採用Twitter版本。 測試
2.安裝lzo和lzo-devel包。在聯網狀況下能夠很是方便的進行安裝。 網站
在Red Hat下經過下面的命令: ui
#yum install liblzo-devel
在Ubuntu下經過下面的命令: spa
#apt-get install liblzo2-devel
若是是在斷網的狀況下能夠到網站http://www.oberhumer.com/opensource/lzo/下載lzo源碼,下載完成後經過下面的命令完成LZO的安裝:
#tar -zxf lzo-2.06.tar.gz #cd lzo-2.06 #./configure --enable-shared #make #make install
安裝完成後要確保.so文件放在/usr/lib和/usr/lib64文件夾下面(/usr/lib/liblzo2.so /usr/lib64/liblzo2.so)。LZO須要在集羣中的每個節點進行安裝。
安裝完成後最好把LZOP也安裝上,以便在本地使用,LZOP的下載地址:http://www.lzop.org/。
3.編譯和安裝Hadoop-LZO
首先須要下載和安裝apache-ant,這裏再也不作詳細的介紹。而後經過下面的命令進行編譯:
32位機器
#export CFLAGS=-m32 #export CXXFLAGS=-m32 #ant compile-native
64位機器
#export CFLAGS=-m64 #export CXXFLAGS=-m64 #ant compile-native tar
在編譯過程當中須要ivy依賴解析,能夠聯網活着將依賴包拷到機器上。
4.將編譯好的HADOOP-LZO拷貝到Hadoop安裝目錄下相應的文件夾。在Hadoop-LZO的主目錄下執行下面的相關命令:
#cp build/hadoop-lzo*.jar $HADOOP_HOME/lib/ #tar -cBf - -C build/hadoop-lzo-0.4.15/lib/native/ . | tar -xBvf - -C $HADOOP_HOME/lib/native
5.配置Hadoop,在core-site.xml中添加以下內容:
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
6.測試Hadoop-Lzo是否安裝成功
首先在本地壓縮一個文件並將該文件put到HDFS:
#lzop 20120229 #hadoop fs -put 20120229.lzo /testdir/
對測試文件進行索引:
#hadoop jar hadoop-lzo-0.4.15.jar com.hadoop.compression.lzo.DistributedLzoIndexer /testdir/20120229.lzo
查看集羣上是否有20120229.lzo.index:
#hadoop fs -ls /testdir/
若是索引文件存在則證實安裝成功。