本地Java代码访问hadoop集群时错误Access denied for user ??. Superuser privilege is required错误解决办法

hadoop集群搭建好之后,本地通过java api访问hadoop集群,java代码如下

package ch4;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;

public class FileSystemOperationDemo3 {

	public static void main(String[] args) throws IOException {
		Configuration conf = new Configuration();
		String dfspath = "hdfs://cmaster:8020/TestDir";
		Path pathdir = new Path(dfspath);
		Path file = new Path(pathdir + "test.txt");
		FileSystem fs = pathdir.getFileSystem(conf);
		fs.mkdirs(pathdir);
		System.out.println("Write to" + conf.get("fs.default.name"));
		// d盘下需要存在log.txt文件
		fs.copyFromLocalFile(new Path("d://log.txt"), file);
		fs.copyToLocalFile(file, new Path("e://"));

		boolean bn = fs.rename(file, new Path(
				"hdfs://cmaster:8020/TestDir/renamelog.txt"));
		System.out.println(bn);
		DistributedFileSystem hdfs = (DistributedFileSystem) fs;
		DatanodeInfo[] dataNodeStatus = hdfs.getDataNodeStats();
		for (DatanodeInfo datanodeInfo : dataNodeStatus) {
			System.out.println("DataNode节点的名字" + datanodeInfo.getHostName());
		}
		boolean bndel = fs.delete(pathdir, true);
		System.out.println("删除HDFS目录及文件:" + bndel);
		fs.close();
	}
}

本地Java代码访问hadoop集群时错误Access denied for user ??. Superuser privilege is required错误解决办法_第1张图片
上图是运行错误的结果图,从画横线的地方可以看出是权限错误,出现Access denied for user Administrator. Superuser privilege is required的错误信息:

首先在Linux下输入:hadoop fs -chmod 777 / 命令,开启权限(可读可写可执行)
可以有用这种解决方式:点击跳转到目标链接
也可以用另一种方式:由于是访问权限问题,我们在访问Hadoop的时候加入System.setProperty("HADOOP_USER_NAME", "root");
其中的“root”是具有访问hadoop集群权限的用户名,即管理员权限。本地Java代码访问hadoop集群时错误Access denied for user ??. Superuser privilege is required错误解决办法_第2张图片

修改完代码让我们来运行以下代码,看看能否访问hadoop服务

本地Java代码访问hadoop集群时错误Access denied for user ??. Superuser privilege is required错误解决办法_第3张图片
代码运行成功

你可能感兴趣的:(hadoop,java)