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);
        }
    }
  • 相关阅读:
    js 克隆一个对象或数组
    css 透明png背景蓝色解决
    修改默认的ajaxStart, ajaxStop 显示loading
    用css定义长字符串的截断显示
    chrome 不支持小字号的文字解决
    fiddler response 乱码
    U盘装机神器UniversalUSBInstaller
    vmware虚拟机内存分配
    chrome https添加信任
    css tabindex
  • 原文地址:https://www.cnblogs.com/413xiaol/p/9949936.html
Copyright © 2011-2022 走看看