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

上次使用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);
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容