【Hadoop/Hbase】centos上安装并设置Snappy/LZO压缩方式
在hadoop和hbase文件传输可以在压缩之后在进行传输,这样就可以在传输的时候减少传输数据,增大I/O和带宽效率。其中压缩阶段分为三种:包括input data压缩,middle result by map还有最后一种就是reduce之后的最终结果。在hadoop中主要提供了三种压缩方式Gzip、LZO、Snappy三种数据压缩。后面两种需要额外的配置和安装依赖。但是,在hadoop中默认都已经实现接口。但是如果你不进行相应的安装依赖,当你想使用某个压缩手段的时候还是会报出各种错误。比如在启动某个job的时候可能会有如下提示:
"Cannot loadSnappy without snappy library!",或者也有可能是抛出一个异常"native snappy library not available",这都是说明当前hadoop的配置中无法使用压缩。那么想使用某种压缩手段必须先安装,这里介绍的是Snappy的安装。Snappy是谷歌推出的一种压缩方法,详情请点击
其中安装步骤如下:
在安装之前必须确定Requirements: gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3都已经安装到机器上,如果没有请相应挨个安装。
1:下载并安装snappy,在上述的snappy介绍地址中就有下载链接。下载并解压到/tmp/snappy目录下。
安装
$tarzxvf snappy-1.0.5.tar.gz
$cdsnappy-1.0.5
$ ./configure
$make
$sudomakeinstall
2:注意这时仅是安装了snappy,但是还没有使snappy和hadoop连接起来。下面就是通过mvn,创建hadoop-snappy的jar包。首先需要下载hadoop-snappy到/tmp。解压到/tmp/hadoop-snappy,进入该目录。 执行
$ mvn package -Dsnappy.prefix=/usr/local
3:安装完成之后就可以发现当期目录下的taget文件夹中存在打成的包。然后把相应的包拷贝到hadoop的lib文件夹下
$ cp-r
hadoop-snappy-0.0.1-SNAPSHOT/lib/* <YOUR_HADOOP_HOME>/lib
4:然后在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,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
另外在加入声明的时候注意,value各个之间不要留有空格,否则会报出各种class not found的异常
java.lang.IllegalArgumentException: Compression codecorg.apache.hadoop.io.compress.SnappyCodec not found
重启hadoop,安装完成。
上述介绍的是Snappy的安装方法,下面结束的是LZO的压缩办法。对于LZO的压缩效率和压缩速度是不逊于Snappy的。在有些机器上可能会发生莫名Snappy无法使用,那不得不就采用LZO了,这里就简单说明一下步骤。
LZO是压缩需要先下载hadoop-lzo,下载地址
该包是通过ant编译的,所以想进行下面操作还需要下载安装ant。好在编译之前需要下载安装的额外的东西就是如上了,下面先开始安装lzo
yum install lzo-devel.x86_64
yum install lzop.x86_64
我的机器是64位的,所以安装了64为的包。你也可以自己去查找适合的rpm包,然后自己安装。如果自己通过rmp包安装,记得需要三个依赖。可以通过该rpm网站去查找适合的包,rpmfinder。
安装好lzo就需要编译hadoop lzo。
进入上面下载的hadoop-lzo文件夹下的含有build.xml的路径下,执行命令 ~/apache-ant-1.8.2/bin/ant compile-native tar。这里对于/apache-ant-1.8.2/bin/ant 请注意,它是你的ant所在的路径,请使用你的路径代替这个路径。当没有错误的执行完成之后,就可以发现有一个build目录。在build目录下有一个native文件夹,把native的文件夹下的内容拷贝到你hadoop的本地目录下,重启hadoop。OK,搞定。
如果上面的Snappy安装成功的话,其实LZO只是执行了相同的步骤而已。
对于安装LZO可能遇到的问题如下几个
1:最常见的应该是如下错误了。
java.io.IOException: java.lang.RuntimeException: native-lzo library not available
at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:544)
at org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:488)
at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:136)
at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1412)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:271)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:756)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: java.lang.RuntimeException: native-lzo library not available
at com.hadoop.compression.lzo.LzopCodec.createDecompressor(LzopCodec.java:104)
at com.hadoop.compression.lzo.LzopCodec.createInputStream(LzopCodec.java:89)
at com.hadoop.mapred.DeprecatedLzoLineRecordReader.<init>(DeprecatedLzoLineRecordReader.java:59)
at com.hadoop.mapred.DeprecatedLzoTextInputFormat.getRecordReader(DeprecatedLzoTextInputFormat.java:158)
at org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:432)
at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:508)
... 13 more
这个错误引发的地方很多,我从以下几个可能的地方。
1)你的hadoop的本地目录中没有编译好的文件,hadoop的本地文件目录一般是hadoop_home/lib/native/<your_LInux>;
2)JAVA_LIBRARY_PATH没有设定。其实这点很奇怪,有的节点上不设定依旧可以跑。不过过遇到这问题之后,修改一下没命令尝试一下也好。如果解决了问题更好,解决不了那再想办法。使用命令 export JAVA_LIBRARY_PATH=/hadoop/hadoop-1.2.0/lib/native/Linux-amd64-64
3)没有编译hadoop-lzo,按章上面安装步骤编译一遍。
2:可能某个节点上会报有Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!但是在其他节点上正常。
那这个时候也没有办法就在该节点上安装LZO,使用上述安装命令。
版权声明:本文为博主原创文章,转载请注明来源。
页:
[1]