解决org.apache.hadoop.security.AccessControlException: Permission denied: user=XXX,access=WRITE.......

在使用Java API操作HDFS时如果出现如下错误提示:

org.apache.hadoop.security.AccessControlException: Permission denied: user=XXX, access=WRITE, inode="/user/XXX/output":root:supergroup:drwxr-xr-x

有3种解决方法:

1.在程序的main方法里面,最上面一行加入

System.setProperty("HADOOP_USER_NAME","root");

 2.在文件系统FileSystem创建对象时,表明“你的用户名”

FileSystem fileSystem = FileSystem.get(uri ,conf,"root");

3.在hdfs的配置文件hdfs-site.xml中,将dfs.permissions修改为False(不推荐,可能不成功)

<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
### Hadoop 权限拒绝问题解决方案 当遇到 `AccessControlException` 错误提示权限被拒,具体表现为用户无法获得写入访问权限时,这通常是因为文件系统的权限设置不正确。对于当前情况描述中的错误信息显示inode `/home/hadoop` 的权限为 `drwxr-xr-x` 并归属于 `supergroup` 组。 #### 修改目录权限 为了使指定用户能够拥有写权限,在不影响其他安全策略的前提下,可以考虑调整该路径下的权限位以允许组成员具有写权限: ```bash hdfs dfs -chmod 775 /home/hadoop ``` 上述命令会将目标位置的权限更改为 `drwxrwxr-x`, 即给予属主读取、写入和执行权限;给同组用户提供读取、写入以及执行权限;而其他用户仅保留读取与执行权限[^1]。 #### 添加用户到适当群组 如果希望特定用户能对该资源进行修改操作而不改变现有权限结构,则可将其加入对应的用户组(`supergroup`)中去: ```bash sudo usermod -aG supergroup username ``` 这里需替换 `username` 成实际需要授权的那个用户名字[^2]。 #### 配置核心站点属性 有时还需要检查并配置Hadoop集群的核心站点配置文件(core-site.xml),确保启用了正确的身份验证机制,并且设置了合适的代理用户规则来支持跨节点的数据处理需求[^3]: ```xml <property> <name>hadoop.proxyuser.<proxy-user>.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.<proxy-user>.groups</name> <value>*</value> </property> ``` 以上更改使得名为 `<proxy-user>` 的用户可以从任何主机作为任意群体运行作业。请注意这里的通配符(*)表示所有可能值, 实际部署环境中应依据安全性考量做相应限定。 完成这些改动之后记得重启相关服务以便让新的设定生效。另外建议定期审查日志记录寻找潜在的安全隐患或者性能瓶颈所在之处。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值