步骤:
1、 编译hadoop-lzo-xx.jar
hadoop lzo下载位置: https://github.com/twitter/hadoop-lzo
2、拷贝hadoop-lzo-xx.jar至hadoop/lib目录下,同时拷贝相应的本地库lib/native/Linux-amd64-64/* 至hadoop/lib/native/Linux-amd64-64下
3、hadoop集群中各台机器安装lzo库,可以通过rpm或者下载源码直接安装
4、安装lzop。
5、修改core-site.xml,增加
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
6、如果map中间结果也要使用lzo压缩,修改mapred-site.xml,增加
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
具体使用lzo,需要在本地使用lzop将文件压缩为.lzo文件,上传至hdfs,然后创建索引(注:不创建索引的话每个lzo文件还是会对应同一个map):
#单机运行生成lzo index文件
hadoop jar /opt/hadoop/lib/hadoop-lzo-xx.jar com.hadoop.compression.lzo.LzoIndexer xx.lzo
#Mapreduce生成lzo index文件
hadoop jar /opt/hadoop/lib/hadoop-lzo-xx.jar com.hadoop.compression.lzo.DistributedLzoIndexer xx.lzo
mr程序中读入lzo文件只需将输入文件格式改为LzoTextInputFormat 。