赞
踩
hadoop本身是不支持lzo压缩格式的,所以在对类库进行查询时,里面是不会显示lzo是否支持,如何让hadoop能够支持lzo压缩呢?下面我们开始正题!
命令 输入
hadoop checknative
笔者使用的hadoop版本为2.7.2,所以要使用lzo压缩组件必须对组件里的hadoop版本进行修改编译。这里就利用maven来对其进行改造。同理很多版本问题,可以利用此方法来解决。
注意 maven的配置文件需要将中央仓库修改为阿里云的仓库!不要问我为什么!
下载
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
解压
tar -zxvf lzo-2.10.tar.gz
进入到 lzo 目录里
cd lzo-2.10
设置前缀
./configure -prefix=/usr/local/hadoop/lzo/
安装
make
make install
<hadoop.current.version>2.7.2</hadoop.current.version>
export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
编译好的文件改名hadoop-lzo-0.4.21.jar 放入到 $HADOOP_HOME/share/hadoop/common/下面然后进行分发!记住要分发!!
mv hadoop-lzo-0.4.21.jar hadoop-2.7.2/share/hadoop/common/
同步分发到集群!
增加下面内容,保存后分发给集群,并重启集群!
<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, org.apache.hadoop.io.compress.SnappyCodec, 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>
io.compression.codecs
该配置是为MR在执行时加载core-site时可以读到该配置项,告知MR可以用这些编解码器!
如果不加此配置项,默认支持3种编解码器:
GzipCodec,DefaultCodec,BZip2Codec
io.compression.codec.lzo.class
指定LZO的编解码器全类名,因为hadoop是不支持LZO压缩的,要想使用LZO压缩就必须告诉hadoop在哪里找到该编解码器。所以要将组件jar包放到hadoop启动加载的目录下,还要告知全类名!
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec /input /output
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.LzoCodec /input
后缀名中lzo后面是下划线!而不是 .
测试创建索引
总结利用LZO压缩的文件无法对其进行创建索引!!
成功切片!
-Dmapreduce.output.fileoutputformat.compress=true
-Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec
hadoop调用common下的lzo的jar进行生成索引,指定全类名
com.hadoop.compression.lzo.DistributedLzoIndexer
之前写过一个利用hadoopAPI的java压缩程序压缩程序代码
,运行lzo压缩的时候偶然发现他是走的mr!用的命令是hadoop jar 而没用java -jar 所以感觉很诡异,去研究了下他的源码!
利用jd-gui查看字节码
证实了猜想,该程序在建立索引时走的MR程序!
LZOP继承于LZO,所以继承了父类的成员变量,在父类中指定了编解码器的类!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。