Permission denied: user=administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

参考博文:http://blog.csdn.net/xiaoshunzi111/article/details/52062640

http://www.udpwork.com/item/7047.html

在此篇文章里面作者分析了hadoop的整个登录过程,对于我有用的是其中的这一段:

2.login.login();
这个会调用HadoopLoginModule的login()和commit()方法。
HadoopLoginModule的login()方法是一个空函数,只打印了一行调试日志 LOG.debug("hadoop login");
commit()方法负责把Principal添加到Subject中。
此时一个首要问题是username是什么?
在使用了kerberos的情况下,从javax.security.auth.kerberos.KerberosPrincipal的实例获取username。
在未使用kerberos的情况下,优先读取HADOOP_USER_NAME这个系统环境变量,如果不为空,那么拿它作username。否则,读取HADOOP_USER_NAME这个java环境变量。否则,从com.sun.security.auth.NTUserPrincipal或者com.sun.security.auth.UnixPrincipal的实例获取username。
如果以上尝试都失败,那么抛出异常LoginException("Can’t find user name")。
最终拿username构造org.apache.hadoop.security.User的实例添加到Subject中。

看完这一段,我明白了执行login.login的时候调用了hadoop里面的HadoopLoginModule方法,而关键是在commit方法里面,在这里优先读取HADOOP_USER_NAME系统环境变量,然后是java环境变量,如果再没有就从NTUserPrincipal等里面取。关键代码为:

  1. if (!isSecurityEnabled() && (user == null)) {
  2. String envUser = System.getenv(HADOOP_USER_NAME);
  3. if (envUser == null) {
  4. envUser = System.getProperty(HADOOP_USER_NAME);
  5. }
  6. user = envUser == null ? null : new User(envUser);
  7. }

OK,看到这里我的需求也就解决了,只要在系统的环境变量里面添加HADOOP_USER_NAME=hadoop(HDFS上的有权限的用户,具体看自己的情况),或者在当前JDK的变量参数里面添加HADOOP_USER_NAME这个Java变量即可。我的情况添加系统环境变量更方法。

如果是在Eclipse里面运行,修改完环境变量后,记得重启一下eclipse,不然可能不会生效。

时间: 2024-10-11 21:08:29

Permission denied: user=administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x的相关文章

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=Mypc, access=WRITE, inode="/":fan:supergroup:drwxr-xr-x

在window上编程提示没有写Hadoop的权限 Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=Mypc, access=WRITE, inode="/":fan:supergroup:drwxr-xr-x 曾经踩过的坑: 保存结果到hdfs上没有写的权限* 通过修改权限将文件写入到指定的目录下* * $HAD

异常-Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x

1 详细异常 Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.DefaultAu

Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”

今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: Permission denied: user=anonymous, access=EXECUTE, inode="/tmp" 解决办法:报错内容提示hive没有/tmp目录的权限,赋予权限即可: hdfs dfs -chmod 777 /tmp 原文地址:https://www.cnblogs.com/lijinze-tsi

Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

通过手动安装CDH没权限 [[email protected] ~]# groupadd supergroup[[email protected] ~]# hadoop fs -mkdir /tao3^C[[email protected] ~]# usermod -a -G supergroup root[[email protected] ~]# hadoop fs -mkdir /tao4 原文地址:https://www.cnblogs.com/yaohaitao/p/11707190.

Permission denied: user=root, access=WRITE, inode="/":hadoopuser:supergroup:drwxr-xr-x

提示往HDFS写文件是不容许的. 在conf/hdfs-site.xml中加入: <property> <name>dfs.permissions</name> <value>false</value> </property>

org.apache.hadoop.security.AccessControlException: Permission denied: user=?, access=WRITE, inode=&quot;/&quot;:hadoop:supergroup:drwxr-xr-x 异常解决

进行如下更改: vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml [我的hadoop目录在/usr/local下,具体的是修改你的hadoop目录中的/etc/hadoop/hdfs-site.xml]添加一个property:<property>      <name>dfs.permissions</name>      <value>false</value></property> 然

eclipse 向HDFS中写入文件报错 permission denied

环境:win7  eclipse    hadoop 1.1.2 当执行创建文件的的时候, 即: fileSystem.mkdirs(Path);//想hadoop上创建一个文件报错 报错: org.apache.hadoop.security.AccessControlException:Permission denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 原因: 1. 当前用户

HDFS客户端的权限错误:Permission denied

搭建了一个Hadoop的环境,Hadoop集群环境部署在几个Linux服务器上,现在想使用windows上的Java客户端来操作集群中的HDFS文件,但是在客户端运行时出现了如下的认证错误,被折磨了几天,问题终得以解决.以此文记录问题的解决过程. (如果想看最终解决问题的方法拉到最后,如果想看我的问题解决思路请从上向下看) 问题描述 上传文件的代码: private static void uploadToHdfs() throws FileNotFoundException,IOExcepti

Hadoop的distcp命令出现Permission denied错误

Hadoop的distcp命令可以实现将文件从一个hdfs文件系统中拷贝到另外一个文件系统中,如下所示: $ bin/hadoop distcp -overwrite hdfs://123.123.23.111:9000/hsd/t_url hdfs://123.123.23.156:9000/data/t_url 正常情况下应该出现如下运行结果: Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared m