在用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();
    }



}

改完就编译成功了

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐