2012-07-21 99 views
32

我是hadoop分布式文件系统的新手,我在我的机器上完成了hadoop单节点的完整安装,但之后当我要上传数据到hdfs时,它给出了错误信息Permission Denied。从终端在hdfs上被拒绝的权限

消息与命令:

[email protected]:/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 

[email protected]:/usr/local/hadoop$ 
+1

你有访问权限的目录这个问题 - 您使用sudo的? – 2012-07-21 16:00:53

+0

是的,使用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 $ – 2012-07-21 17:17:16

+0

在我的情况下,在我没有权限的文件系统中的某个位置下载文件。 – optimist 2015-06-18 14:08:55

回答

51

我解决了这个问题暂时通过禁用DFS permission.By添加下面的属性代码 增加到conf/HDFS-site.xml中

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

这是我在新集群中设置的第一件事;-) – 2016-10-17 20:42:18

+0

其中是'conf'文件夹? – 2017-05-11 07:31:03

+1

conf文件夹是namenode的配置。在我的情况下,使用自制软件安装hadoop,但它在/usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml – 2017-08-24 13:41:36

14

遇到这里两个单独的问题:


[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input 
put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ 

使用须藤和添加hduser到sudouser后

这里,用户hduser无权访问本地目录/usr/local/input-data。也就是说,您的本地权限过于严格。你应该改变它。


[email protected]:/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

+0

copyFromLocal:org.apache.hadoop.security.AccessControlException:权限被拒绝:user = root,access = WRITE,inode =“”:hduser:supergroup:rwxr-xr-x更改上面允许的错误的权限。 – 2012-07-22 08:50:43

+2

不要把'put'当做'sudo'。做为'hduser'。 – 2012-07-22 21:01:36

42

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

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

你真正要做的就是读取本地文件,根据您的本地权限,但将文件放在HDFS当你喜欢认证用户hdfs。您可以使用其他ID(注意真正的身份验证方案配置,但通常不是这种情况)。

优点:

  1. 权限都保存在HDFS。
  2. 你不需要sudo
  3. 根本不需要实际适当的本地用户'hdfs'。
  4. 由于以前的观点,您不需要复制任何内容或更改权限。
4

启动一个shell hduser(从根部),并运行命令

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

[更新] 还要注意的是,hdfs用户是超级用户,并拥有所有R/W特权。

+0

它不需要启动一个shell。 'sudo -u hdfs hadoop fs -chmod 777/hbase'也可以。 – 030 2014-06-10 09:39:39

+0

好点,我以为你会想运行多个命令作为hduser。 – 2014-06-10 12:21:48

3

我已经解决了通过以下步骤

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