Spark/HDFS上传文件错误:Permission denied

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35852328/article/details/82683119

问题描述

今天用spark将RDD结果输出到HDFS时,因为CDH集群重新配置的原因,权限没有设置好。导致写文件出bug。

错误情况

org.apache.hadoop.security.AccessControlException: Permission denied: user=xiet, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

解决方法

1、对非CDH用户,到Namenode上修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false

<property>
<name>dfs.permissions</name>
<value>false</value>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
</description>
</property>

修改完之后,要重启下hadoop的服务才能生效。

2、对CDH用户:假设系统有一个文件夹/user/directory,注意,这个文件夹的拥有者不是所谓的“root”。实际上,这个文件夹为“hdfs”所有(755权限,这里将hdfs理解为一个属于supergroup的用户)。 
所以,只有hdfs可以对文件夹进行写操作。与Unix/Linux不同,hdfs是超级使用者(superuser),而不是root。 
所以,当你想要进行创建文件夹或者上传文件等操作的时候,可以这么做:

sudo -u hdfs hdfs dfs -mkdir /user/intern/test67

这里写图片描述
同理,上传文件:

sudo -u hdfs hdfs dfs -put myfile.txt /user/intern/test67

显然,上面的方法麻烦在于:每当进行一次操作的时候,都需要切换成hdfs用户。这在spark-shell开发程序倒还好,但是对提交作业的时候,显然是很不方便的。

这里,我们可以创建一个文件夹,更改其权限为root(或你的用户名)。所以,你可以向这个文件夹随意的存、改文件了。

sudo -u hdfs hadoop fs -chown root /user/intern/test67

没运行这条命令时: 
这里写图片描述

运行这条命令时: 
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_35852328/article/details/82683119