从大数据研发的角度解决org.apache.hadoop.security.AccessControlException: Permission denied: user=***,不需修改集群配置文件

  • 前言:

       该异常的解决方法在网上确实已经很多了,但是楼主们都没有考虑到一个问题么?那就是身为大数据研发团队的我们,有权限轻易的去修改hadoop集群的配置文件么?就算有权限修改,万一耦合度较高的文件被修改,我们要去哭着求运维帮我们擦屁股么?很显然小编这篇小短文是在不动运维配置好的配置文件的基础上,解决远程提交hadoop任务出现的AccessControlException,跟这小编往下走吧。

  • 出现异常的情况:

  1. 远程提交任务给Hadoop 可能会遇到 "org.apache.hadoop.security.AccessControlException:Permission denied: user=..."
  2. 如果是spark over YARN, 也同样会遇到类似的问题
org.apache.hadoop.security.AccessControlException: Permission denied: user=czx, access=WRITE, inode="/user/czx/.sparkStaging/application_1580634218023_0002”:hdfs:hdfs:drwxr-xr-x
  • 为什么产生异常信息:

        原因很简单,因为远程提交的情况下如果没有hadoop 的系统环境变量,就会读取当前主机的用户名,所以Hadoop集群的节点中没有该用户名的权限,所以出现的异常。

  • 解决方案(小编个人推荐方法2):

       1、

        将:export HADOOP_USER_NAME = hdfs 

        添加到 ~/.bash_profile 中,然后执行

        source  ~/.bash_profile 

 

       2、

        将System.setProperty("HADOOP_USER_NAME”,“hdfs”);     

        添加到代码的main方法首部,

        该语句的意思是修改代码的系统变量HADOOP_USER_NAME的内容为hdfs

 

当然,如果大家在公司里是大数据业务的全权负责人,不妨也可以使用网上常说的修改hadoop的配置文件来解决该问题。

 

另外,如果大家有更好的方法解决问题,可以下方留言一起交流。

 

最后,小编想告诉大家,要以工程师的方式解决问题,以科学家的方式思考问题。

你可能感兴趣的:(hadoop,hdfs,Exception)