生产环境中java api访问HDFS权限问题Permission denied解决方案

java api访问hdfs文件系统未指定访问用户的情况下出现报错

        //1、创建hadoop configuration对象
//        Configuration conf = new Configuration();
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://linux121:9000");
        //2、创建hadoop FileSystem对象
//        FileSystem fileSystem = FileSystem.get(new URI("hdfs://linux121:9000"), conf, "root");
        FileSystem fileSystem = FileSystem.get(conf);
        //3、创建文件夹
        fileSystem.mkdirs(new Path("/tp_user"));
        //4、关闭资源
        fileSystem.close();

出现以下报错:

org.apache.hadoop.security.AccessControlException: Permission denied: user=QI, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:350)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:251)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:189)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1753)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1737)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1696)
	at org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:60)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:2990)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1096)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB

  在未指定访问名的情况下默认是使用当前系统用户名进行访问,会出现权限不够报错异常,hdfs用户访问权限比较鸡肋,不能防止坏人做坏事!!

在生产的情况下,有以下三种方案进行解决:

  • 指定用户信息获取FileSystem对象 关闭HDFS集群权限校验
  • 关闭HDFS集群权限校验
vim hdfs-site.xml
#添加如下属性
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
  • 基于HDFS权限本身比较鸡肋的特点,我们可以彻底放弃HDFS的权限校验,如果生产环境中 我们可以考虑借助kerberos以及sentry等安全框架来管理大数据集群安全。所以我们直接修 改HDFS的根目录权限为777
    hadoop fs -chmod -R 777 /
posted @ 2022-01-05 22:38  zhangqi0828  阅读(667)  评论(0编辑  收藏  举报