在用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();
}
}
改完就编译成功了
好文阅读
发表评论