权限被拒绝在hdfs

我是hadoop分布式文件系统的新手,我已经在我的机器上完成了hadoop单节点的完整安装,但之后当我要将数据上传到hdfs时,它给出了一个错误消息Permission Denied

来自terminal的消息与命令:

 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权限来临时解决这个问题。通过将下面的属性代码添加到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一样被authentication。 你可以用其他的ID(注意真正的authenticationschemeconfiguration,但通常不是这种情况)。

优点:

  1. 权限保留在HDFS上。
  2. 你不需要sudo
  3. 你根本不需要真正合适的本地用户“hdfs”。
  4. 由于以前的观点,您不需要复制任何内容或更改权限。

您遇到两个单独的问题:


 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-xhduser:supergroup:rwxr-xr-x表示只有hduser具有写权限。 Hadoop并不尊重root用户。


要解决这个问题,我build议你改变本地数据的权限:

 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用户是超级用户,并具有所有权限。

我已经通过使用以下步骤解决了这个问题

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