次,conf.set方法中的"fs.defaultFS"和"fs.hdfs.impl"属性设置可能需要与实际运行的Hadoop集群的地址匹配,这里假设本地主机9000端口正在运行分布式文件系统服务。要怎么作
时间: 2024-09-24 13:08:29 浏览: 55
如果你的Hadoop集群确实是在本地主机的9000端口上运行,并且你想连接的是HDFS,那么你需要将`"fs.defaultFS"`设置为你集群的实际URL。这通常是`hdfs://<hostname>:<port>/`格式,例如:
```java
conf.set("fs.defaultFS", "hdfs://localhost:9000");
```
`"fs.hdfs.impl"`属性通常不需要显式设置,因为它通常会被自动识别为合适的实现,如`org.apache.hadoop.hdfs.DistributedFileSystem`。但如果在特定环境下有自定义实现,或者有其他的实现替换,才需要指定。
确保你的代码能够访问到Hadoop的bin目录,因为启动Hadoop服务后,它会在那里创建必要的配置文件和环境变量。另外,如果Hadoop服务不是默认启动的,你需要确保在执行这段代码之前已经手动启动了Hadoop守护进程,如NameNode和DataNodes。
如果更改了这些设置后仍然遇到问题,可能需要检查网络连通性,防火墙设置,以及Hadoop的日志信息,以便找到更具体的错误原因。
相关问题
try{ String fileName = "test"; Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://10.4.6.201:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fs = FileSystem.get(conf); System.out.println("ss"); boolean exists = fs.exists(new Path(fileName)); System.out.println(exists); if(exists){ System.out.println("文件存在"); }else{ System.out.println("文件不存在"); } }catch (Exception e){ System.out.println("111"); e.printStackTrace(); }为什么程序不结束
在你提供的代码中,程序没有结束可能有两种情况:
1. 代码中存在其他逻辑,导致程序没有结束。
在你提供的代码中,只有判断文件是否存在的逻辑,并没有其他代码,因此排除了这种情况。
2. Hadoop连接没有正确关闭,导致程序没有结束。
在你的代码中,你创建了一个`FileSystem`对象来连接Hadoop,但是没有显式地关闭这个连接。这样会导致连接资源没有正确释放,从而导致程序没有结束。你可以在代码最后添加`fs.close()`语句来关闭连接,例如:
```java
try {
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://10.4.6.201:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
System.out.println("ss");
boolean exists = fs.exists(new Path(fileName));
System.out.println(exists);
if (exists) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
fs.close(); // 关闭连接
} catch (Exception e) {
System.out.println("111");
e.printStackTrace();
}
```
添加了`fs.close()`之后,程序应该就可以正常结束了。
以下程序源代码用于判断名为m的文件是否保存在了HDFS中: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSFileIfExist { public static void main(String[] args){ try{ String x = "____"; Configuration c = new Configuration(); c.set("fs.defaultFS", "hdfs://localhost:9000"); c.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem f = FileSystem.get(____); if(____.exists(new Path(____))){ System.out.println("文件存在"); }else{ System.out.println("文件不存在"); } }catch (Exception e){ e.printStackTrace(); } } } 请完成该程序源代码(从上向下,按顺序填写)。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSFileIfExist {
public static void main(String[] args){
try{
String x = "m";
Configuration c = new Configuration();
c.set("fs.defaultFS", "hdfs://localhost:9000");
c.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem f = FileSystem.get(c);
if(f.exists(new Path("/" + x))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
阅读全文