1 错误复现
hive cli读取parquet格式存储表格时报错
ERROR:in thread "main" org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
深入阅读报错信息发现
ERROR:Caused by: java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path
2 错误分析
java编译器下不存在libsnappy.lib支持文件
3 解决方法
- 首先确定该问题是包依赖问题,即缺少相应lib文件,并且该lib文件应该出现在
${JAVA_HOME}/jre/lib
文件夹下 - 其次,我们寻找包应当借助maven工具,所有依赖包我们都借助依赖管理工具进行下载。在任何项目中添加以下依赖
<!-- https://mvnrepository.com/artifact/org.xerial.snappy/snappy-java -->
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.2.6</version>
</dependency>
更新后在Maven Repository中寻找相关位置,解压jar包,进入解压后
org/xerial/snappy/native/Linux/aarch64
位置。复制该文件夹下libsnappyjava.so
文件
3. 将libsnappyjava.so
复制到${JAVA_HOME}/jre/lib
文件夹下即可。如果lib文件支持计算机架构不对,会报错
ERROR:caused by:java.lang.UnsatisfiedLinkError: /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/jre/lib/libsnappyjava.jnilib: dlopen(/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/jre/lib/libsnappyjava.jnilib, 1): no suitable image found. Did find: /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/jre/lib/libsnappyjava.jnilib: mach-o, but wrong architecture /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/jre/lib/libsnappyjava.jnilib: mach-o, but wrong architecture
此时只要更换org/xerial/snappy/native
位置下相应的libsnappyjava.so文件即可
- 备注:本文也同步上传了libsnappy.so的配置文件。