在上一篇博客hadoop基于zookeper自动高可用搭建 搭建好远程的hadoop集群服务后,需要通过本地java代码访问该集群。

java结构如下图所示

idea windows本地访问远程hadoop服务问题_hadoop

测试类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集群。

idea windows本地访问远程hadoop服务问题_idea 本地访问hadoop_02

打印的是本地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文件

idea windows本地访问远程hadoop服务问题_java_03

加载core-site.xml文件时没有获取到目录,得到的是空,也就是没有加载到本地自定义的core-site.xml文件,没有把默认的文件给覆盖

idea windows本地访问远程hadoop服务问题_大数据_04

所以可能是资源文件设置有问题,打开idea 的iml文件

idea windows本地访问远程hadoop服务问题_hadoop_05


看到资源文件加载的路径不对,所以重新mark一下资源文件或者直接修改iml文件

idea windows本地访问远程hadoop服务问题_大数据_06


然后重新测试,看到正常访问hadoop集群

idea windows本地访问远程hadoop服务问题_java_07


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: windowsHadoop