Shell hdfs上的权限被拒绝

Shell hdfs上的权限被拒绝,shell,security,hadoop,permissions,hdfs,Shell,Security,Hadoop,Permissions,Hdfs,我是hadoop分布式文件系统的新手,我已经在我的机器上完成了hadoop single node的完整安装。但之后,当我要将数据上载到hdfs时,它会给出一条错误消息权限被拒绝 来自终端的消息和命令: hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) hduser@ubuntu:/usr/loc

我是hadoop分布式文件系统的新手,我已经在我的机器上完成了hadoop single node的完整安装。但之后,当我要将数据上载到hdfs时,它会给出一条错误消息
权限被拒绝

来自终端的消息和命令:

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$ 

您在这里遇到两个不同的问题:


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


这里,用户
root
(因为您使用的是sudo)无权访问HDFS目录
/input
。如您所见:
hduser:supergroup:rwxr-xr-x
表示只有
hduser
具有写入权限。Hadoop并不真正尊重作为特殊用户的
root


要解决此问题,我建议您更改对本地数据的权限:

sudo chmod -R og+rx /usr/local/input-data/

然后,再次尝试
put
命令作为hduser

我通过禁用dfs权限临时解决了此问题。通过在下面添加属性代码 到conf/hdfs-site.xml

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

dfs.0权限
假的

我也遇到过类似的情况,以下是我的方法,有些不同:

 HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /
您实际要做的是根据您的本地权限读取本地文件,但当将文件放在HDFS上时,您会像user
HDFS
一样进行身份验证。您可以使用其他ID执行此操作(注意真实的身份验证方案配置,但通常不是这样)

优点:

  • 权限保留在HDFS上
  • 您不需要
    sudo
  • 实际上,您根本不需要合适的本地用户“hdfs”
  • 您不需要复制任何内容,也不需要因为前面的几点而更改权限
  • 以hduser身份启动shell(从root)并运行命令

    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
    

    对于Hadoop 3.x,如果您在未经身份验证的情况下尝试在HDFS上创建文件(例如,
    user=dr.who
    ),则会出现此错误

    不建议对需要安全的系统使用此选项,但是,如果要在Hadoop 3中完全禁用文件权限,
    hdfs site.xml
    设置已更改为:

    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>
    
    
    dfs.permissions.enabled
    假的
    

    您是否拥有目录的访问权限-是否使用sudo?是的,在使用sudo之后,,,,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-xhduser@ubuntu:/usr/local/hadoop$在我的情况下,这是因为我试图在文件系统中没有权限的位置下载文件。copyFromLocal:org.apache.hadoop.security.AccessControlException:Permission denied:user=root,access=WRITE,inode=“”:hduser:supergroup:rwxr-xr-x更改权限后出现错误提示。请勿将
    put
    设置为
    sudo
    。按
    hduser
    的方式执行。无需启动shell
    sudo-u hdfs-hadoop fs-chmod 777/hbase也可以工作。很好,我假设您希望以hduser身份运行多个命令。这是我在新集群中设置的第一件事;-)
    conf
    文件夹在哪里?conf文件夹是namenode的配置。在我的例子中,使用自制安装的hadoop,但它位于/usr/local/cillar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml中。这怎么可能是解决方案?它可以用于测试,而不是用于生产此解决方案就像在wifi不工作时插入以太网电缆:)您可以由您的用户替换第一个hdfs,例如:HADOOP_user_NAME=您的用户hdfs dfs-put/source/destination
    su hdfs
    hadoop fs -put /usr/local/input-data/ /input
    exit
    
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>