nab*_*tar 8 hadoop mapreduce hdfs
这可能是一个基本问题,但我无法在Google上找到答案.
我有一个map-reduce作业,它在输出目录中创建多个输出文件.我的Java应用程序在远程hadoop集群上执行此作业,在作业完成后,它需要使用org.apache.hadoop.fs.FileSystemAPI 以编程方式读取输出.可能吗?
应用程序知道输出目录,但不知道map-reduce作业生成的输出文件的名称.似乎没有办法以编程方式列出hadoop文件系统API中目录的内容.如何读取输出文件?
这似乎是一种常见的情况,我相信它有一个解决方案.但我遗漏了一些非常明显的东西.
Tho*_*lut 19
您正在寻找的方法称为listStatus(Path).它只是将Path中的所有文件作为FileStatus数组返回.然后你可以简单地循环它们创建一个路径对象并阅读它.
FileStatus[] fss = fs.listStatus(new Path("/"));
for (FileStatus status : fss) {
Path path = status.getPath();
SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);
IntWritable key = new IntWritable();
IntWritable value = new IntWritable();
while (reader.next(key, value)) {
System.out.println(key.get() + " | " + value.get());
}
reader.close();
}
Run Code Online (Sandbox Code Playgroud)
对于Hadoop 2.x,您可以像这样设置阅读器:
SequenceFile.Reader reader =
new SequenceFile.Reader(conf, SequenceFile.Reader.file(path))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9036 次 |
| 最近记录: |