You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HBase执行NativeLibraryChecker报lz4 UnsatisfiedLinkError问题排查

问题根因

报错java.lang.UnsatisfiedLinkError是LZ4压缩算法的JNI方法签名不匹配导致,本质是版本混装问题,具体触发原因有两个:

  • 升级Hadoop 3.3.3时未清理旧版本3.2.2的残留文件,/opt/hadoop/lib/native目录下混有旧版本编译的原生库文件,和3.3.3版本Jar包内定义的JNI方法无法对应
  • HBase 2.4.9自带的Hadoop依赖包版本与你部署的Hadoop 3.3.3版本不一致,类加载时优先加载了HBase目录下的旧版本Lz4Compressor类,去匹配3.3.3版本的原生库时方法签名对不上,直接抛出链接错误。
排查验证步骤

所有节点按顺序执行以下命令确认问题:

  • 验证当前原生库加载状态
su - hbase -c 'hadoop checknative -a'
  • 检查native目录下的库文件版本是否匹配3.3.3
ls -l /opt/hadoop/lib/native/
strings /opt/hadoop/lib/native/libhadoop.so.1.0.0 | grep "Hadoop 3\."

如果输出里出现Hadoop 3.2.2字样,就是旧库残留。

  • 检查HBase自带Hadoop依赖版本
ls -l /opt/hbase/lib/ | grep hadoop-common

如果输出的Jar包版本不是3.3.3,就是依赖冲突。

  • 额外确认hbase用户下的JAVA_HOME路径正确
su - hbase -c 'echo $JAVA_HOME'
su - hbase -c 'java -version'

确保返回的是JDK 11.0.15的路径,不会加载到系统自带的其他JDK版本。

修复方案

注意:所有操作前必须先停掉所有HBase、HDFS服务,禁止在服务运行状态下替换文件,避免文件锁导致替换不生效。所有节点都要执行以下操作,不要只在单节点操作。

  1. 清理旧版本原生库残留
# 备份旧native目录
mv /opt/hadoop/lib/native /opt/hadoop/lib/native.bak.$(date +%F)
# 从Hadoop 3.3.3官方安装包中提取原生库
tar -zxf /your/path/to/hadoop-3.3.3.tar.gz -C /tmp/
cp -r /tmp/hadoop-3.3.3/lib/native /opt/hadoop/lib/
# 配置正确权限
chmod -R 755 /opt/hadoop/lib/native
chown -R root:root /opt/hadoop/lib/native
  1. 统一HBase和Hadoop的依赖版本
# 备份HBase自带的旧Hadoop依赖
mkdir -p /opt/hbase/lib/hadoop-jar-bak
mv /opt/hbase/lib/hadoop-*.jar /opt/hbase/lib/hadoop-jar-bak/
# 拷贝Hadoop 3.3.3的对应Jar包到HBase lib目录
cp /opt/hadoop/share/hadoop/common/hadoop-*.jar /opt/hbase/lib/
cp /opt/hadoop/share/hadoop/hdfs/hadoop-*.jar /opt/hbase/lib/
# 删除不需要的测试、源码包
rm -f /opt/hbase/lib/hadoop-*-test.jar /opt/hbase/lib/hadoop-*-sources.jar /opt/hbase/lib/hadoop-*-javadoc.jar
  1. 补全Hadoop环境变量配置
    编辑/opt/hadoop/etc/hadoop/hadoop-env.sh,在现有配置下新增一行:
export HADOOP_OPTS="-Djava.library.path=/opt/hadoop/lib/native"
  1. 验证修复结果
    先启动HDFS集群,确认HDFS正常后,执行原生库检查命令:
su - hbase -c 'hbase org.apache.hadoop.util.NativeLibraryChecker'

正常输出会显示bzip2、zlib、lz4、zstd等所有原生库加载成功,无UnsatisfiedLinkError报错,之后再启动HBase服务即可。

内容的提问来源于stack exchange,提问作者ManSinhLee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:24:25