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();
}
}
上图是运行错误的结果图,从画横线的地方可以看出是权限错误,出现Access denied for user Administrator. Superuser privilege is required的错误信息:
首先在Linux下输入:hadoop fs -chmod 777 / 命令,开启权限(可读可写可执行)
可以有用这种解决方式:点击跳转到目标链接
也可以用另一种方式:由于是访问权限问题,我们在访问Hadoop的时候加入System.setProperty("HADOOP_USER_NAME", "root");
其中的“root”是具有访问hadoop集群权限的用户名,即管理员权限。
修改完代码让我们来运行以下代码,看看能否访问hadoop服务
代码运行成功