在上一篇博客hadoop基于zookeper自动高可用搭建 搭建好远程的hadoop集群服务后,需要通过本地java代码访问该集群。
java结构如下图所示
测试类HdfsTest 代码如下:
package com.wh.hdfs.test;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
/**
* Created by wh 2020/11/23.
*/
public class HdfsTest {
private Configuration conf;
private FileSystem fileSystem;
@Before
public void befor() throws Exception {
// 一开始首先加载配置文件,包括默认的配置文件
// 自定义的会覆盖默认的
conf=new Configuration(true);
// 获取filesystem对象,操作HDFS
fileSystem=FileSystem.get(conf);
}
public void afater() throws Exception {
// 用完后关闭到HDFS的连接
fileSystem.close();
}
@Test
public void testLs() throws Exception {
FileStatus [] fs=fileSystem.listStatus(new Path("/"));
for (FileStatus f : fs) {
System.out.println(f);
}
}
}
测试结果却是如下图所示,表示没有连接到hadoop集群。
打印的是本地windows中hadoop_home所在盘的文件目录。
所以应该是没有加载到我们配置的core-site.xml以及hfds-site.xml文件。而是加载了默认的文件。
通过debug Configuration类,到方法
private Configuration.Resource loadResource(Properties properties, Configuration.Resource wrapper, boolean quiet) 可以看到如下结果
当加载core-default.xml 时 正常加载了windows本地的hadoop_home路径下的 core-default.xml文件
加载core-site.xml文件时没有获取到目录,得到的是空,也就是没有加载到本地自定义的core-site.xml文件,没有把默认的文件给覆盖
所以可能是资源文件设置有问题,打开idea 的iml文件
看到资源文件加载的路径不对,所以重新mark一下资源文件或者直接修改iml文件
然后重新测试,看到正常访问hadoop集群