org.apache.hadoop.security.AccessControlException Permission denied user=XXX

问题

“权限被拒绝”错误可能出现在各种用例和几乎任何使用CDH的应用程序中。

例如,尝试使用此命令启动jobtracker时:

service hadoop-0.20-mapreduce-jobtracker start

您可能会看到此错误或类似错误:

org.apache.hadoop.security.AccessControlException: Permission denied: user=mapred, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:224) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:204) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:149) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:4891) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:4873) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:4847) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:3192) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:3156) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3137) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:669)

虽然重现此错误的步骤可能有很大差异,但根本原因非常明确,您可以通过在 stdout 或相关日志文件中查找以下行来了解此问题:

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

适用条件

CDH(所有版本),Mapreduce,HDFS,依赖于读取或写入HDFS的其他服务

原因

未正确配置对HDFS文件系统的访问和/或某些目录的权限。

故障排除步骤

有几种可以尝试的解决方案:

  1. /user/ 目录由hdfs 拥有,具有755权限。因此,只有hdfs可以写入该目录。与unix/linux不同,hdfs是超级用户而不是root用户。所以你需要这样做:
sudo -u hdfs hadoop fs -mkdir /user/,,myfile,,
sudo -u hdfs hadoop fs -put myfile.txt /user/,,/,,

如果要为root创建主目录以便将文件存储在其目录中,请执行以下操作:

sudo -u hdfs hadoop fs -mkdir /user/root
sudo -u hdfs hadoop fs -chown root /user/root

然后你可以以root身份执行:

hadoop fs -put file /user/root/
  1. 在namenode应该监听的网络端口上,您也可能被拒绝:

通过在/etc/hadoop/conf/core-site.xml中更改服务正在侦听的地址来解决此问题。默认情况下,NameNode可能正在侦听localhost:8020(127.0.0.1)

所以要清楚,为以下属性实现此值:

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://0.0.0.0:8020</value>
</property>

然后使用hadoop-hdfs-namenode重启服务

可选:使用netstat -tupln | grep 8020验证


参考链接

https://community.cloudera.com/t5/Community-Articles/How-to-resolve-quot-Permission-denied-quot-errors-in-CDH/ta-p/36141

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值