在本地eclipse上运行此段代码的时候会出现报错信息:

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.1.21:9000");
fs = FileSystem.get(conf);

报错信息如下所示:

org.apache.hadoop.security.AccessControlException: Permission denied: user=Admin, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:238)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:179)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6545)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6527)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:6479)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2712)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2632)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2520)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:579)

解决方案(推荐):
在系统的环境变量添加HADOOP_USER_NAME,值为运行Hadoop的用户名称。例如我的用户就是hadoop(重启电脑,否则可能会不生效)
这里写图片描述

或者就是将电脑名字改为hadoop,当然这种方法是比较low的,我们不可能每次都要进行修改吧!

客户端去操作hdfs的时候,是需要有一个身份的。默认的情况下。HDFS客户端API会从JVM中获取一个参数来最为自已的用户身份:-DHADOOP_USER_NAME=hadoop

还可以通过代码去指定当前用户:

Configuration conf = new Configuration();
fs = FileSystem.get(new URI("hdfs://admin1:9000"), conf, "hadoop");
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐