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

时间:2017-12-20 05:04:17

标签: hadoop hdfs

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

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文件夹的完全读写权限。

2 个答案:

答案 0 :(得分:3)

首先,您不应直接写入/ 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

然后来自hdfs用户的exitchaithu现在可以写入自己的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>

答案 1 :(得分: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

这对你来说是非常基础和重要的,请尝试上面提到的那些,并告诉我,如果这些不起作用,我可以根据你得到的错误提供更多帮助。