52

我是 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$ 
4

6 回答 6

72

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

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>
于 2012-07-22T19:02:32.057 回答
56

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

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

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

好处:

  1. 权限保存在 HDFS 上。
  2. 你不需要sudo
  3. 您根本不需要真正合适的本地用户“hdfs”。
  4. 由于前面的几点,您不需要复制任何内容或更改权限。
于 2013-11-15T13:32:10.487 回答
16

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


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/

然后,以 hduser 身份put再次尝试该命令。

于 2012-07-21T18:58:38.667 回答
6

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

su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit
于 2014-10-10T06:24:30.520 回答
5

以 hduser 身份(从 root)启动 shell 并运行您的命令

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

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

于 2014-05-06T15:30:22.247 回答
3

对于 Hadoop 3.x,如果您尝试在未经身份验证的情况下(例如user=dr.who)在 HDFS 上创建文件,您将收到此错误。

不建议用于需要安全的系统,但是如果您想在 Hadoop 3 中完全禁用文件权限,则hdfs-site.xml设置已更改为:

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

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

于 2019-12-01T23:12:21.807 回答