Apache Ranger启用HDFS插件后NameNode重启出现StackOverflowError
解决启用Apache Ranger HDFS插件后NameNode重启StackOverflowError问题
我之前帮团队排查过一模一样的问题,根源就出在Ranger插件自动添加的重复权限配置上。咱们一步步来解决:
问题原因
Ranger的enable-hdfs-plugin.sh脚本会同时添加dfs.permissions和dfs.permissions.enabled两个配置项,并且都设为true。但这里有个坑:
dfs.permissions是HDFS旧版本的权限控制开关参数dfs.permissions.enabled是新版本用来替代它的参数
两者同时启用会导致HDFS原生权限检查和Ranger的权限拦截逻辑发生循环调用,最终触发StackOverflowError。
解决步骤
修改HDFS配置文件
找到你的HDFS配置目录下的hdfs-site.xml(通常是$HADOOP_HOME/etc/hadoop/hdfs-site.xml,如果是用Ambari/Cloudera Manager管理的集群,直接在控制台编辑HDFS配置),删除以下重复的配置块:dfs.permissions true 只保留
dfs.permissions.enabled=true的配置项即可。确认Ranger属性提供者配置完整
检查dfs.namenode.inode.attributes.provider.class的配置值是否完整,正确的类路径应该是:<property> <name>dfs.namenode.inode.attributes.provider.class</name> <value>org.apache.ranger.authorization.hadoop.RangerHdfsInodeAttributeProvider</value> </property>如果脚本只生成了不完整的类路径(比如你提到的
org.apache.ranger.a...),一定要补全,否则也会引发异常。同步配置并重启服务
- 如果是集群环境,把修改后的配置同步到所有HDFS节点
- 先重启Ranger Admin服务,确保插件配置生效
- 最后重启NameNode服务
验证结果
查看NameNode的日志文件(路径一般是$HADOOP_HOME/logs/hadoop-hdfs-namenode-<hostname>.log),确认没有StackOverflowError相关的报错,服务能正常启动。
内容的提问来源于stack exchange,提问作者Bibek Chaudhary
相关产品推荐
相关产品推荐

