【问题标题】:Permission denied at hdfshdfs 权限被拒绝
【发布时间】:2012-07-20 13:23:35
【问题描述】:

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

【问题讨论】:

  • 您是否有权访问该目录 - 您是否使用 sudo?
  • 是的,使用后 sudo,,,,hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org. apache.hadoop.security.AccessControlException: 权限被拒绝: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x hduser@ubuntu:/usr/local/hadoop$
  • 就我而言,这是因为我试图在我的文件系统中我没有权限的位置下载文件。

标签: shell security hadoop permissions hdfs


【解决方案1】:

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

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

【讨论】:

  • 这是我在新集群中设置的第一件事 ;-)
  • conf 文件夹在哪里?
  • conf文件夹是namenode的配置。就我而言,使用自制软件安装了 hadoop,但它位于 /usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml
  • 这怎么可能是解决方案?可以用于测试,不能用于生产
  • 这个解决方案就像wifi不工作时插入以太网电缆:)
【解决方案2】:

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

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

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

优点:

  1. 权限保留在 HDFS 上。
  2. 你不需要sudo
  3. 您根本不需要真正合适的本地用户“hdfs”。
  4. 您无需复制任何内容或更改权限,因为之前的要点。

【讨论】:

  • 你可以用你的用户替换第一个hdfs,例如:HADOOP_USER_NAME=your_user hdfs dfs -put /source /destination
  • 这不是一个解决方案,它是一个工作区。你基本上说“我的用户没有权限?让我们使用超级用户”......
  • 对于 2014 年来说,这是一个完美的解决方案,即使现在它也有它的目标听觉。这显然是在断开您的 HDFS 用户与系统用户的链接。是的,您拥有操作系统用户这一事实并没有为您提供有关 hdfs 的任何信息。正如我所说,如果您想对 HSDP 用户进行身份验证,可以使用“其他身份验证方法”。就在那个时候,除了周边安全之外,没有人能做任何事情。把它想象成后端进程的服务帐户(真实用户在 API 级别左右进行身份验证)——在中小型公司工作 100%。
【解决方案3】:

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


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 命令。

【讨论】:

  • copyFromLocal: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 更改权限后出现上述错误提示。
  • 不要把put 当作sudo。使用hduser
  • 在我的情况下这是组权限问题,由@DonaldMiner 建议的 chmod 解决。
【解决方案4】:

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

su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit

【讨论】:

    【解决方案5】:

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

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

    [更新] 另请注意,hdfs 用户是超级用户,拥有所有读/写权限。

    【讨论】:

    • 不需要启动shell。 sudo -u hdfs hadoop fs -chmod 777 /hbase 也可以。
    • 好点,我假设你想以 hduser 身份运行多个命令。
    【解决方案6】:

    对于 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

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2018-02-05
      • 2015-04-28
      相关资源
      最近更新 更多