​​Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied:​​

  ​​Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=administrator, access=WRITE​​

描述:在window下使用Eclipse进行hadoop的程序编写,然后Run on hadoop 后,出现如下错误:

11/10/28 16:05:53 INFO mapred.JobClient: Running job: job_201110281103_0003
11/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=administrator, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

        因为Eclipse使用hadoop插件提交作业时,会默认以administrator身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/xxx , 我的为/user/hadoop ,   由于 administrator 用户对hadoop目录并没有写入权限,所以导致异常的发生。解决方法为:放开 hadoop 目录的权限 , 命令如下 :$hadoop fs -chmod 777 /user/hadoop  



--------------------------------------------------------------------------------------------------------------------------------------------------

问题:

Windows|Eclipse 运行HDFS程序之后,报:org.apache.hadoop.security.AccessControlException: Permission denied: user=sunqw, access=WRITE, inode="":hadoop:supergroup:rwxr-xr-x。

或者

Windows|Eclipse 运行HDFS程序之后,报:org.apache.hadoop.security.AccessControlException: Access denied for user sunqw. Superuser privilege is required。


解决方法:

方式一:

在系统环境变量中增加HADOOP_USER_NAME,其值为root;

或者 通过java程序动态添加,如下:

System.setProperty("HADOOP_USER_NAME", "root");


方式二:

使用Eclipse在非hadoop运行的用户下进行写入hdfs文件系统中时,由于sunqw对"/"目录没有写入权限,所以导致异常的发生。解决方法即开放hadoop中的HDFS目录的权限,命令如下:hadoop fs -chmod 777 /  。


方式三:

修改hadoop的配置文件:conf/hdfs-core.xml,添加或者修改 dfs.permissions 的值为 false。


方式四:

将Eclipse所在机器的用户的名称修改为root,即与服务器上运行hadoop的用户一致。