hdfs权限被拒绝

Vig*_*ati 41 security permissions shell hadoop hdfs

我是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$ 
Run Code Online (Sandbox Code Playgroud)

使用sudo并在sudouser中添加hduser后:

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$ 
Run Code Online (Sandbox Code Playgroud)

Vig*_*ati 65

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

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>
Run Code Online (Sandbox Code Playgroud)

  • 如何解决?可以测试,不能用于生产 (3认同)
  • 这是我在新集群中设置的第一件事;-) (2认同)

Rom*_*nko 50

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

 HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /
Run Code Online (Sandbox Code Playgroud)

您实际执行的操作是根据本地权限读取本地文件,但在将文件放在HDFS上时,您将像用户一样进行身份验证hdfs.您可以使用其他ID执行此操作(注意真正的身份验证方案配置,但通常不是这种情况).

好处:

  1. 权限保留在HDFS上.
  2. 你不需要sudo.
  3. 您根本不需要实际适当的本地用户'hdfs'.
  4. 由于之前的要点,您无需复制任何内容或更改权限.


Don*_*ner 14

您在这里遇到两个不同的问题:


hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied)
Run Code Online (Sandbox Code Playgroud)

这里,用户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
Run Code Online (Sandbox Code Playgroud)

在这里,用户root(因为您使用的是sudo)无法访问HDFS目录/input.如您所见:hduser:supergroup:rwxr-xr-x表示只有hduser写访问权限.Hadoop并不真正尊重root特殊用户.


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

sudo chmod -R og+rx /usr/local/input-data/
Run Code Online (Sandbox Code Playgroud)

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

  • 不要把`put`当作`sudo`.把它作为`hduser`. (2认同)

jav*_*dev 6

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

su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit
Run Code Online (Sandbox Code Playgroud)


Mar*_*app 5

以hduser(从root)启动shell并运行命令

sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input
Run Code Online (Sandbox Code Playgroud)

[更新]另请注意,hdfs用户是超级用户并具有所有r/w权限.