zoukankan      html  css  js  c++  java
  • 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    public class TestHDFS {
        public static void main(String[] args) throws Exception{
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://192.168.0.104:9000");
            FileSystem fs = FileSystem.get(conf);
    
            //存在的情况下会覆盖之前的目录
            boolean success = fs.mkdirs(new Path("/xiaol"));
            System.out.println(success);
        }
    }

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

    网上的方法:

      1.在hdfs的配置文件中,将dfs.permissions.enabled修改为False

      2.hadoop fs -chmod 777 /

    我觉得这俩方法都是屎


    hadoop在访问hdfs的时候会进行权限认证,取用户名的过程是这样的:

    读取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")

    解决方案:

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import java.util.Properties;
    
    public class TestHDFS {
        public static void main(String[] args) throws Exception{
            Properties properties = System.getProperties();
            properties.setProperty("HADOOP_USER_NAME", "root");
    
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://192.168.0.104:9000");
            FileSystem fs = FileSystem.get(conf);
    
            //存在的情况下会覆盖之前的目录
            boolean success = fs.mkdirs(new Path("/xiaol"));
            System.out.println(success);
        }
    }
  • 相关阅读:
    第 9 章 用户自己建立数据类型
    第 10 章 对文件的输入输出
    第 7 章 用函数实现模块化程序设计
    第 4 章 选择结构程序设计
    第 5 章 循环结构程序设计
    第 6 章 利用数组处理批量数据
    第 3 章 最简单的 C 程序设计——顺序程序设计
    第 1 章 程序设计和 C 语言
    第 2 章 算法——程序的灵魂
    SQL(SQL Server) 批量替换两列的数据
  • 原文地址:https://www.cnblogs.com/413xiaol/p/9949936.html
Copyright © 2011-2022 走看看