在用Java API 编写代码实现HDFS创建目录功能时,编写如下代码

package com.zhy.hdfs;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.junit.Test;

import java.io.File;

import java.io.IOException;

import java.net.URI;

import java.net.URISyntaxException;

public class HdfsClient {

@Test

public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {

//1.获取Hadoop集群的configuration对象

Configuration configuration=new Configuration();

//2.根据configuration获取Filesystem对象

FileSystem fs=FileSystem.get(new URI("hdfs://0.0.0.0:9000"),configuration,"root");

//3.使用FileSystem对象创建一个测试目录

fs.mkdirs(new Path("/api_test"));

//4.释放FileSystem对象(类似数据库连接)

fs.close();

}

}

 结果报错出现题目问题,

 

直接上解决方案:

1.检查core-site.xml,yarn-site.xml等配置文件是否配置正确,如果配置正确是否开启了yarn,不能只执行

./sbin/start-dfs.sh,

还要执行./sbin/start-yarn.sh,一般来说都是yarn没执行,所以报的错

2.但是我采用第一种方案不行,我是在服务器上安装的hadoop,是阿里云的服务器,而我的错误是将上述的url写成了

hdfs://0.0.0.0:9000,我以为和core-site.xml 中的namenode的url一致,下面是原先配置的core-site.xml的内容

 结果java代码该处的地址要写成你自己的服务器网址,将0.0.0.0换成你自己的服务器网址,不然它找不到你的地址

package com.zhy.hdfs;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.junit.Test;

import java.io.File;

import java.io.IOException;

import java.net.URI;

import java.net.URISyntaxException;

public class HdfsClient {

@Test

public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {

//1.获取Hadoop集群的configuration对象

Configuration configuration=new Configuration();

//2.根据configuration获取Filesystem对象

FileSystem fs=FileSystem.get(new URI("hdfs://你自己的公网地址:9000"),configuration,"root");

//3.使用FileSystem对象创建一个测试目录

fs.mkdirs(new Path("/api_test"));

//4.释放FileSystem对象(类似数据库连接)

fs.close();

}

}

改完就编译成功了

 

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。