您的位置:首页 > 编程语言 > Java开发

eclipse使用JavaAPI操纵Hadoop的HDFS文件系统时提示权限不足的解决方案

2018-02-21 14:19 344 查看
  初学Hadoop,在初步掌握了命令行操作Hadoop的HDFS最基本操作后,尝试用JavaAPI进行简单的HDFS操作,期间出了很多问题,例如,在调用hadoop的JavaAPI中的FileSystem类 的get方法的时候,如果选择有一个参数的构造器,运行会提示权限不足,错误信息部分如下:
org.apache.hadoop.security.AccessControlException: Permission denied: user=wyw, access=WRITE, inode="/access.2":hadoop:supergroup:-rw-r--r--
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
.......

此处,我在windows中的用户名为wyw,而hadoop集群中的用户名为hadoop,而集群中的hdfs文件系统中相应的文件夹没有赋予其他用户读写权限,所以会提示这个错误,可以选择更改集群中文件系统中相应文件夹的权限,但此处给出一个以集群中的用户身份信息去进行相关操作的解决方案。

解决方案1:在调用hadoop的JavaAPI中的FileSystem类 的get方法的时候,选择有三个构造参数的,
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.106.128:9000");
//第一个参数为URI,第二个参数为前面设置的参数,第三个参数为需要传递的用户名
//fs = FileSystem.get(uri, conf, user)
fs = FileSystem.get(new URI("hdfs://192.168.106.128:9000"), conf, "hadoop");
解决方案2,get方法依然选择只有一个参数的构造器,那么此时需要在运行的时候,选择Run configurations里向JVM输入一个用户信息:此处参数的值为hadoop依然是因为我集群中的用户名为hadoop



解决方案3:为windows新建一个与hadoop集群中用户名一样的用户名,不推荐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐