要在hadoop中搭建lzo使用环境非常简单:
安装lzop native libraries例如:sudo yum install lzop lzo2 从如下地址下载 hadoop lzo支持到源代码: 编译从以上链接checkout下来到代码,通常为:ant compile-native tar 将编译出来到hadoop-lzo-*.jar 部署到hadoop集群到各个slave到某个有效目录下,如$HADOOOP_HOME/lib 将以上编译所得到hadoop-lzo native lib binary部署到集群到某个有效目录下,如$HADOOP_HOME/lib/native/Linux-amd64-64。 将如下配置到 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> 将如下配置到mapred-site.xml中: <property> <name>mapred.child.env</name> <value>JAVA_LIBRARY_PATH=/path/to/your/native/hadoop-lzo/libs</value> </property> 如果想要mapreduce再写中间结果时也使用压缩,可以将如下配置也写入到mapred-site.xml中。 <property> <name>mapred.map.output.compression.codec</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property>
如果以上所有操作都成功,那么现在就可以尝试使用lzo了。比如打包一个lzo都压缩文件,如lzo_log文件,上传到hdfs中,然后用以下命令进行测试:
hadoop jar /path/to/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer hdfs://namenode:9000/lzo_logs
如果要写一个job来使用lzo,可以找一个job,例如wordcount,将当中到TextInputFormat修改为LzoTextInputForma,其他都不用修改,job就能从hdfs上读入lzo压缩文件,进行分布式都分块并行处理。