gpt4 book ai didi

hadoop - 以编程方式读取 Hadoop Mapreduce Program 的输出

转载 作者:可可西里 更新时间:2023-11-01 14:13:14 25 4
gpt4 key购买 nike

这可能是一个基本问题,但我无法在 Google 上找到答案。
我有一个 map-reduce 作业,它在其输出目录中创建多个输出文件。我的 Java 应用程序在远程 hadoop 集群上执行此作业,作业完成后,它需要使用 org.apache.hadoop.fs.FileSystem API 以编程方式读取输出。可能吗?
应用程序知道输出目录,但不知道 map-reduce 作业生成的输出文件的名称。似乎没有办法以编程方式列出 hadoop 文件系统 API 中目录的内容。如何读取输出文件?
这似乎是一个司空见惯的场景,我相信它有一个解决方案。但我遗漏了一些非常明显的东西。

最佳答案

您要查找的方法称为 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();
}

对于 Hadoop 2.x,您可以像这样设置阅读器:

 SequenceFile.Reader reader = 
new SequenceFile.Reader(conf, SequenceFile.Reader.file(path))

关于hadoop - 以编程方式读取 Hadoop Mapreduce Program 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com