在HBASE壓縮算法-SNAPPY算法安裝這片文章中,介紹了Snappy壓縮的安裝方法,但是安裝並非一帆風順,中間也是各種問題頻出,現將遇到的問題羅列如下:
1./root/modules/hadoop-snappy/maven/build-compilenative.xml:62: Execute failed: java.io.IOException: Cannot run program "autoreconf" (in directory "/root/modules/hadoop-snappy/target/native-src"): java.io.IOException: error=2, No such file or directory
Hadoop snappy的安裝,是需要前置條件的:
1. Requirements: gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3
出現這個錯誤,就是因為沒有安裝autoconf,automake,libtool的緣故。由於我是在本機ubuntu系統下測試的,只需要依次apt-get install autoconf,automake,libtool即可
2.[exec] make: *** [src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo] Error 1
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (compile) on project hadoop-snappy: An Ant BuildException has occured: The following error occurred while executing this line: [ERROR] /home/ngc/Char/snap/hadoop-snappy/hadoop-snappy-read-only/maven/build-compilenative.xml:75: exec returned: 2
這個原因比較惡心,是因為Hadoop snappy對gcc版本還有要求,因為我是2012年12月份的ubuntu12.04,所以gcc已經是4.6了,但是在google code那看到有人說他從gcc4.6回退成gcc4.4就ok了,我也是了一下,果然這個錯誤沒有了。
gcc --version #查看gcc版本
gcc (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.6.3
Copyright © 2010 Free Software Foundation, Inc.
本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
如何回退呢?
1. apt-get install gcc-3.4
2. rm /usr/bin/gcc
3. ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
之后,再gcc --version,你就會發現,gcc已經變成4.4.7了。
3.[exec] /bin/bash ./libtool --tag=CC --mode=link gcc -g -Wall -fPIC -O2 -m64 -g -O2 -version-info 0:1:0 -L/usr/local//lib -o libhadoopsnappy.la -rpath /usr/local/lib src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo src/org/apache/hadoop/io/compress/snappy/SnappyDecompressor.lo -ljvm -ldl
[exec] /usr/bin/ld: cannot find -ljvm
[exec] collect2: ld returned 1 exit status
[exec] make: *** [libhadoopsnappy.la] 錯誤 1
[exec] libtool: link: gcc -shared -fPIC -DPIC src/org/apache/hadoop/io/compress/snappy/.libs/SnappyCompressor.o src/org/apache/hadoop/io/compress/snappy/.libs/SnappyDecompressor.o -L/usr/local//lib -ljvm -ldl -O2 -m64 -O2 -Wl,-soname -Wl,libhadoopsnappy.so.0 -o .libs/libhadoopsnappy.so.0.0.1
網上有很多 解決/usr/bin/ld: cannot find -lxxx 這樣的博客,但是這里,我告訴你,他們的都不適用。因為這兒既不是缺什么,也不是版本不對,是因為沒有把安裝jvm的libjvm.so symbolic link到usr/local/lib。如果你的系統時amd64,可到/root/bin/jdk1.6.0_37/jre/lib/amd64/server/察看libjvm.so link到的地方,這里修改如下:
ln -s /root/bin/jdk1.6.0_37/jre/lib/amd64/server/libjvm.so /usr/local/lib/
問題即可解決。
終於解決了,這幾個遺留了很久的問題。盡情的去snappy吧~