hadoop上传文件Permission denied

Hadoop上传文件时出现Permission denied错误,用户dr.who无写权限。解决方案:1. 修改core-site.xml配置hadoop.http.staticuser.user为hadoop;2. 修改目录权限(chmod 755/777)或文件所有者(chown);3. 关闭HDFS权限检查(不建议)。文章还提供了完整的core-site.xml配置示例。

作者:zhuge···预计阅读 11 分钟·756 阅读·0 评论
hadoop上传文件Permission denied

错误描述:Permission denied: user=dr.who, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x

我们可以通过修改core-site.xml,配置为当前用户

<property>

    <name>hadoop.http.staticuser.user</name>

    <value>hadoop</value>

</property>

另外,通过查看hdfs的默认配置hdfs-default.xml发现hdfs默认是开启权限检查的。

dfs.permissions.enabled=true #是否在HDFS中开启权限检查,默认为true

由于当前用户权限不足,所以无法操作/目录。

解决方案:

解决方案有两种,一是直接修改/tmp目录的权限设置,操作如下,

hdfs dfs -chmod -R 755 / #创建者拥有读写可执行权限、同一组用户以及其他用户拥有读和执行权限。

然后就可以正常访问/目录下的文件了。

或者 修改HDFS文件夹权限,如/dir文件夹

hdfs dfs -chmod -R 777 /dir #所有用户都可读可写可执行。

原权限:drwxr-xr-x

修改后:drwxrwxrwx

也可以修改文件的用户为myuser

hdfs dfs -chown -R myuser /dir

原用户:hadoop

修改后:myuser


另一种是直接hdfs的权限配置【不建议】,

<property>

    <name>dfs.permissions.enabled</name>

    <value>false</value>

</property>




其它core-site.xml配置参考

<configuration>
    <!-- 指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
     <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data/tmp</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>
&lt;!--安全认证初始化的类--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.filter.initializers&lt;/name&gt;
    &lt;value&gt;org.apache.hadoop.security.HttpCrossOriginFilterInitializer&lt;/value&gt;
&lt;/property&gt;
&lt;!--是否启用跨域支持--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.cross-origin.enabled&lt;/name&gt;
    &lt;value&gt;true&lt;/value&gt;
&lt;/property&gt;
&lt;!--允许跨域访问的来源,如果有多个,用逗号(,)分隔--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.cross-origin.allowed-origins&lt;/name&gt;
    &lt;value&gt;*&lt;/value&gt;
&lt;/property&gt;
&lt;!--允许跨域的方法列表,如果有多个,用逗号(,)分隔--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.cross-origin.allowed-methods&lt;/name&gt;
    &lt;value&gt;GET,POST,HEAD&lt;/value&gt;
&lt;/property&gt;
&lt;!--允许跨域的标头列表,如果有多个,用逗号(,)分隔--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.cross-origin.allowed-headers&lt;/name&gt;
    &lt;value&gt;X-Requested-With,Content-Type,Accept,Origin&lt;/value&gt;
&lt;/property&gt;
&lt;!--预检请求可以缓存的秒数--&gt;
&lt;property&gt;
    &lt;name&gt;hadoop.http.cross-origin.max-age&lt;/name&gt;
    &lt;value&gt;1800&lt;/value&gt;
&lt;/property&gt;

</configuration>


相关文章

评论

加载中...