最笨的方法解决 使用Snappy 压缩方式报错“java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path”

之前写过一篇这个文章:http://blog.csdn.net/stark_summer/article/details/47361603,那个时候 linux 环境 spark 使用 snappy 方式压缩任然不好用,而今天我同事 hive on hadoop 使用 snappy 压缩方式也报这个错,此刻的我,感觉这个问题 一定要解决

我想了想,只能使用最笨的方式先解决这个问题了,将libsnappyjava.so文件放到$JAVA_HOME/jre/lib/amd64/下了

操作过程如下:

首先把$HADOOP_HOME/share/hadoop/common/lib/snappy-java-1.1.1.7.jar copy 到临时目录下,然后unzip snappy-java-1.1.1.7.jar

解压后会有如下目录:

      4096 Aug 31 15:58 META-INF
      4096 Apr 14 16:05 org

进入 libsnappyjava.so 所在目录:

$cd org/xerial/snappy/native/Linux/x86_64/

就可以看到如下文件:

libsnappyjava.so

copy 到$JAVA_HOME/jre/lib/amd64/

测试程序如下:

import org.xerial.snappy.Snappy;

/**

    • Created by stark_summer on 15/8/8.
  • */
    public class TestSnappy {
    public static void main(String[] args) throws Exception{

    String input = "Hello snappy-java! Snappy-java is a JNI-based wrapper of"
    + "Snappy, a fast compresser/decompresser.";
    byte[] compressed = Snappy.compress(input.getBytes("UTF-8"));
    byte[] uncompressed = Snappy.uncompress(compressed);

    String result = new String(uncompressed, "UTF-8");
    System.out.println(result);
    }
    }


编译:javac -classpath ./snappy-java-1.1.1.7.jar TestSnappy.java

执行:java TestSnappy

执行结果:
Hello snappy-java! Snappy-java is a JNI-based wrapper of Snappy, a fast compresser/decompresser.

将“libsnappyjava.so”文件 copy 到 hadoop 集群:$JAVA_HOME/jre/lib/amd64/ 下,hive on hadoop,使用 snappy 方式压缩不在报错,搞定了

将 SPARK_HOME/conf/spark-defaults.conf 

spark.io.compression.codec lzf 注释或者去掉这行,spark 将使用默认 snappy 压缩方式,也不再报错了


PS:

目前用最笨的方式解决了,但还是要进一步排查此问题




    <div style="padding-top: 20px">         
        <p style="font-size: 12px">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
    </div>