Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.146.81:9000"); Job job = Job.getInstance(conf); job.setJarByClass(WeatherDriver.class); job.setMapperClass(WeatherMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(WeatherBean.class); job.setReducerClass(WeatherReducer.class); job.setOutputKeyClass(NullWritable.class); job.setOutputValueClass(WeatherBean.class); //job.setNumReduceTasks(0); FileInputFormat.setInputPaths(job, new Path("/weather/input/china_data.txt")); Path out = new Path("/weather/out"); FileSystem fs = FileSystem.get(new URI("hdfs://192.168.146.81:9000"), conf, "root"); if(fs.exists(out)) { fs.delete(out, true); } FileOutputFormat.setOutputPath(job, out); boolean flag = job.waitForCompletion(true); System.out.println(flag ? 0 : 1);是干啥的
时间: 2024-04-06 22:31:36 浏览: 58
这是一个使用Hadoop MapReduce框架实现的天气数据处理程序,主要功能是读取位于HDFS上的输入文件,对其中的数据进行处理,并将结果输出到HDFS上的指定目录。具体来说,该程序包括了一个Mapper类和一个Reducer类,Mapper类将输入数据进行拆分和转换,生成一系列键值对,Reducer类对这些键值对进行聚合和统计,最终输出结果。在代码中,还包括了一些与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();
}
}
}
阅读全文