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

本文详细记录了解决Hadoop集群在使用SNAPPY压缩方式时出现的问题的过程,包括将libsnappyjava.so文件复制到特定目录、修改配置文件等步骤,最终通过这些操作成功解决了问题,确保了SNAPPY压缩方式的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写过一篇这个文章:http://blog.youkuaiyun.com/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:

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




2025-05-10 09:44:21,583 INFO Ready to initialize current node abilities, support modes: [SDK_CLIENT] 2025-05-10 09:44:21,583 INFO Initialize current abilities finish... 2025-05-10 09:44:21,583 INFO [AbilityControlManager] Successfully initialize AbilityControlManager 2025-05-10 09:44:22,570 WARN Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'instanceOperatorClientImpl' defined in URL [jar:file:/D:/work_software/nacos/software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/InstanceOperatorClientImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientOperationServiceProxy' defined in URL [jar:file:/D:/work_software/nacos/software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentClientOperationServiceImpl' defined in URL [jar:file:/D:/work_software/nacos/software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: C:\Users\yb\AppData\Local\Temp\librocksdbjni8136127328909963401.dll: Can't find dependent libraries 2025-05-10 09:44:22,609 INFO Stopping service [Tomc
05-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值