无法更改 hdfs 目录的读写权限

Ku0*_*002 4 hadoop hdfs

我正在尝试将文本文件复制到 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
Run Code Online (Sandbox Code Playgroud)

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

cri*_*007 7

首先,您不应该直接写入 /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
Run Code Online (Sandbox Code Playgroud)

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

hadoop fs -put test.txt
Run Code Online (Sandbox Code Playgroud)

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


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


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

export HADOOP_USER_NAME=hdfs 
hadoop fs -put test.txt /user
Run Code Online (Sandbox Code Playgroud)

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


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

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