原生Hadoop环境HBase启用Ranger2.1插件报NoClassDefFoundError如何解决
Ranger 2.1 HBase插件适配HBase 1.4.12报错解决方案
根因说明
你遇到的java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/coprocessor/RegionCoprocessor错误是Ranger 2.1默认发布的HBase插件与HBase 1.4.12版本不兼容导致的:
Ranger 2.1官方默认提供的HBase插件是基于HBase 2.x版本编译的,HBase 1.x与2.x分支的协处理器API存在差异,因此在HBase 1.4.x环境下加载插件时会出现类缺失问题。
修复步骤
方案一:调整类加载优先级(临时验证方案)
如果暂时无法重新编译插件,可先尝试调整协处理器类加载优先级,优先使用HBase本地的类加载路径:
- 停止HBase集群所有服务
- 在
hbase-site.xml中添加如下配置:
<property> <name>hbase.coprocessor.classloader.first</name> <value>false</value> </property>
- 重启HBase集群,查看日志是否还抛出类不存在错误,若依然报错则使用方案二。
方案二:编译适配HBase 1.4.12的Ranger HBase插件(永久解决方案)
- 拉取Ranger 2.1正式版源码包,进入源码根目录执行编译命令,指定HBase版本为当前集群使用的1.4.12:
mvn clean package -DskipTests -Drat.skip=true -Phbase -Dhbase.version=1.4.12 - 编译完成后从
ranger-hbase-plugin/target目录获取适配后的HBase插件安装包 - 卸载原有错误版本的HBase插件:
- 停止HBase集群
- 删除HBase安装目录
lib路径下所有Ranger相关的依赖包、软链接 - 移除
hbase-site.xml中之前自动添加的3条Ranger协处理器相关配置
- 安装新编译的适配版HBase插件,执行安装脚本时确认配置的HBase安装路径与集群实际路径一致
- 安装完成后检查
hbase-site.xml配置正确,HBase lib目录下无冲突的Ranger依赖包 - 启动HBase集群,查看Master、RegionServer日志无报错后,在Ranger Admin页面验证HBase权限策略是否生效
内容的提问来源于stack exchange,提问作者Alatau
相关产品推荐
相关产品推荐

