【问题标题】:Unable to change read write permissions to hdfs directory无法更改对 hdfs 目录的读写权限
【发布时间】:2017-12-20 18:45:11
【问题描述】:

我正在尝试将文本文件复制到 hdfs 位置。
我遇到了访问问题,所以我尝试更改权限。
但我无法改变同样面临以下错误:

chaithu@localhost:~$ hadoop fs -put test.txt /user
put: Permission denied: user=chaithu, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

chaithu@localhost:~$ hadoop fs -chmod 777 /user
chmod: changing permissions of '/user': Permission denied. user=chaithu is not the owner of inode=user

chaithu@localhost:~$ hadoop fs -ls /
Found 2 items
drwxrwxrwt   - hdfs supergroup          0 2017-12-20 00:23 /tmp
drwxr-xr-x   - hdfs supergroup          0 2017-12-20 10:24 /user

请帮助我如何更改所有用户访问 HDFS 文件夹的完全读写权限。

【问题讨论】:

  • @Chaitu 删除问题中的 bigdata 和 yarn 标签。

标签: hadoop hdfs


【解决方案1】:

首先,您不应该直接写入 /user 文件夹,也不应该在上面设置 777

您将需要一个用户目录供当前用户运行 mapreduce 作业,因此您需要先sudo su - hdfs 才能成为 HDFS 超级用户。

然后运行这些来为您的用户帐户创建 HDFS 目录

 hdfs dfs -mkdir -p /user/chaithu
 hdfs dfs -chown -R chaithu /user/chaithu
 hdfs dfs -chmod -R 770 /user/chaithu

然后exit 来自 hdfs 用户,chaithu 现在可以写入自己的 HDFS 目录。

hadoop fs -put test.txt

仅此一项就会将文件放入当前用户的文件夹中。


或者,如果这对您来说工作量太大,请改为写入 /tmp


一个懒惰的选择是将您的用户帐户重写为超级用户。

export HADOOP_USER_NAME=hdfs 
hadoop fs -put test.txt /user

这就是为什么 hadoop 不安全或默认强制用户帐户访问(即从不在生产中这样做)


最后,您始终可以在 hdfs-site.xml 中完全关闭权限(同样,仅在开发阶段有用)

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

【讨论】:

    【解决方案2】:

    如果您观察 hdfs dfs -ls 结果,您会看到只有 HDFS 超级用户拥有该路径的权限。

    这里有两种解决方案

    一种是通过root用户更改chaitu的权限并将chaitu设为用户或所有者,例如hdfs dfs -chown -R hdfs:chaitu /path然后您将能够访问该所有者作为所有者。其他肮脏的方法是从根中给hdfs dfs -chmod -R 777 /path,从安全角度来看,这个777不好。

    第二个是使用 ACLS,它为您提供临时访问权限

    请通过此link 了解更多。

    更多关于ACLS

    这对您来说非常基础和重要,请尝试以上建议的方法,如果这些方法不起作用,请告诉我,我可以根据您遇到的错误提供更多帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2017-12-21
      • 1970-01-01
      • 2019-11-17
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多