美文网首页
java远程使用HDFS权限问题解决

java远程使用HDFS权限问题解决

作者: 李征兵 | 来源:发表于2019-07-24 10:01 被阅读0次

上次使用hdfs的时候解决了依赖包异常问题,但是因为hdfs的部署问题并没有完全调试通java远程调用。今天hdfs部署完成就急不可耐的试了一下,又发现了新的问题,报没有用户权限,真是一步一坑呀!寻求了一下百度,了解到hdfs采用了与POSIX系统类似的文件和目录的权限模型,所以要么在hdfs系统上配置用户及rw权限,要么用其他方法解决,考虑到对hdfs系统的解耦依赖,就探索从客户端解决,hdfs的缺省用户是root,那么能否让客户端模拟root呢?经过和一些同事沟通,果然有此方法,现在就把方法介绍一下。

权限异常

Permission denied: user=crazyicelee, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

从这个异常可以看出,客户端的用户是crazyicelee(jar运行的用户),要求的write权限,但是hdfs的节点上用户是root,从而判断用户没有权限,拒绝访问。

客户端修改访问用户

配置客户端访问的环境变量,设置HADOOP_USER_NAME为root,当然基于维护和安全考虑,还是要在hdfs服务端配置用户及权限。

    @Bean
    public HdfsService getHdfsService(){
        Properties properties = System.getProperties();
        properties.setProperty("HADOOP_USER_NAME", "root");
        org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
        conf.set("fs.defaultFS",defaultHdfsUri);
        conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
        conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
        return new HdfsService(conf,defaultHdfsUri);
    }

相关文章

网友评论

      本文标题:java远程使用HDFS权限问题解决

      本文链接:https://www.haomeiwen.com/subject/dnetrctx.html