HDFS上传文件错误:Permission denied: user=root, access=WRITE, inode="/user"

来源:互联网 发布:linux 启动时间 编辑:程序博客网 时间:2024/06/04 21:25

问题描述

    今天用spark-streaming测试HDFS(文件系统)监听情况的时候,因为CDH集群重新配置的原因,权限没有设置好。导致写文件出bug。

错误情况

错误代码那块没保存,下面的代码从网上找的,不过错误的地方是相同的。):

11/10/28 16:05:53 INFO mapred.JobClient: Running job: job_201110281103_000311/10/28 16:05:54 INFO mapred.JobClient: map 0% reduce 0%11/10/28 16:06:05 INFO mapred.JobClient: Task Id : attempt_201110281103_0003_m_000002_0, Status : FAILED# 下面为报错情况org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-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

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

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

阅读全文
0 0
原创粉丝点击