错误描述: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>
<!--安全认证初始化的类-->
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.HttpCrossOriginFilterInitializer</value>
</property>
<!--是否启用跨域支持-->
<property>
<name>hadoop.http.cross-origin.enabled</name>
<value>true</value>
</property>
<!--允许跨域访问的来源,如果有多个,用逗号(,)分隔-->
<property>
<name>hadoop.http.cross-origin.allowed-origins</name>
<value>*</value>
</property>
<!--允许跨域的方法列表,如果有多个,用逗号(,)分隔-->
<property>
<name>hadoop.http.cross-origin.allowed-methods</name>
<value>GET,POST,HEAD</value>
</property>
<!--允许跨域的标头列表,如果有多个,用逗号(,)分隔-->
<property>
<name>hadoop.http.cross-origin.allowed-headers</name>
<value>X-Requested-With,Content-Type,Accept,Origin</value>
</property>
<!--预检请求可以缓存的秒数-->
<property>
<name>hadoop.http.cross-origin.max-age</name>
<value>1800</value>
</property>
</configuration>

评论