我是新来的Hadoop分布式文件系统,我以后做了hadoop的单节点的完整的安装在我的machine.but当我要上传到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$
我解决了这个问题暂时通过禁用DFS permission.By添加下面的属性代码增加到conf / HDFS-site.xml中
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
我有类似的情况,这里是我的方法是有所不同的:
HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /
你真正要做的就是你读本地文件,根据您的本地权限,但将文件放在HDFS当你喜欢认证用户hdfs
。 为此,您可以用其他ID(当心真正身份验证方案配置的,但是这通常不是个例)。
好处:
- 权限都保存在HDFS。
- 你不需要
sudo
。 - 你根本不需要真正合适的本地用户HDFS“。
- 你并不需要复制,因为之前的点什么或更改权限。
您在这里遇到了两个独立的问题:
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/
然后,尝试put
再次命令hduser。
启动一个shell hduser(从根部),并运行命令
sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input
[更新]还要注意的是, hdfs
用户是超级用户,并拥有所有R / W特权。
我用下面的步骤来解决这个问题
su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit