引言:我们在做map reduce的时候遇到这种问题,用他指定的用户去执行mapreduce就行。比如他要求hdfs,我们就用hdfs用户执行,代码如下:
System.setProperty("HADOOP_USER_NAME", "hdfs");
第一步:
解决方法:
到服务器上修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
注意,实验平台可以这么设置,但是工作中,不能这样,这样不安全。
如果还是不行,就是dfs没有权限
第二步:
产生问题原因:
环境hadoop2,cdh5创建
使用hadoop fs -mkdir /usr/xxx创建文件路径时,出现权限问题
===========================================================
1.hadoop fs -ls /user
检查这个路径下面的用户权限学习
drwxrwxrwt - yarn hadoop 0 2014-09-03 11:58 /user/history
drwxr-xr-x - hdfs hadoop 0 2014-09-03 12:00 /user/spark
其中:yarn--创建人,hadoop ---组,而root用户属于访客类型的
2.使用hdfs这个用户登录
sudo -uhdfs hadoop fs -mkdir /usr/
3.通过hdfs用户更改所在用户的权限
sudo -uhdfs hadoop fs -chown 用户:用户组 /usr
比如过我们是root用户,可以用命令 groups root ,查看root用户的组,得到组也是root现在更改用户的权限
sudo -uhdfs hadoop fs -chown root:root /usr
再用命令 hadoop fs -ls / 可以看到 目录 /usr,用户名是root,用户组是root
就搞定了。