HDFS的权限被拒绝

问题描述 投票:42回答:6

我不是hadoop分布式文件系统的新手,我已经在计算机上完成了hadoop单节点的完整安装。但是之后,当我要将数据上传到hdfs时,会显示错误消息Permission Denied

来自终端的带有命令的消息:

hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input
put: /usr/local/input-data (Permission denied)

hduser@ubuntu:/usr/local/hadoop$ 

使用sudo并将hduser添加到sudouser之后:

hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x

hduser@ubuntu:/usr/local/hadoop$ 
shell security hadoop permissions hdfs
6个回答
65
投票

我通过禁用dfs权限暂时解决了此问题。通过添加以下属性代码到conf / hdfs-site.xml

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

50
投票

我有类似的情况,这是我的方法,但有所不同:

 HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /

您实际要做的是按照您的本地权限读取本地文件,但是将文件放在HDFS上时,您就像用户hdfs一样通过了身份验证。您可以使用其他ID进行此操作(请注意实际的身份验证方案配置,但这通常不是这种情况)。

优点:

  1. 权限保留在HDFS上。
  2. 您不需要sudo
  3. 您根本不需要真正合适的本地用户'hdfs'。
  4. 由于先前的观点,您不需要复制任何内容或更改权限。

14
投票

您在这里遇到两个独立的问题:


hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied)

[这里,用户hduser无法访问本地目录/usr/local/input-data。也就是说,您的本地权限限制太多。您应该更改它。


hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x

此处,用户root(因为您使用sudo)无权访问HDFS目录/input。如您所见:hduser:supergroup:rwxr-xr-x表示只有hduser具有写访问权限。 Hadoop并不特别重视root作为特殊用户。


要解决此问题,建议您更改本地数据的权限:

sudo chmod -R og+rx /usr/local/input-data/

然后,再次尝试put命令作为hduser


5
投票

以hduser身份启动shell(从根目录开始并运行命令)>

sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input

[更新]还请注意,hdfs用户是超级用户,并且具有所有r / w特权。


4
投票

我已经通过以下步骤解决了这个问题


0
投票

对于Hadoop 3.x

© www.soinside.com 2019 - 2024. All rights reserved.