gpt4 book ai didi

java - 使用 FileInputFormat.addInputPaths 递归添加 HDFS 路径

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

我有一个类似于 HDFS 的结构

a/b/file1.gz
a/b/file2.gz
a/c/file3.gz
a/c/file4.gz

我用的是经典模式

FileInputFormat.addInputPaths(conf, args[0]);

为 java map reduce 作业设置我的输入路径。

如果我将 args[0] 指定为 a/b,这会工作正常,但如果我只指定 a(我的意图是处理所有 4 个文件)

错误是

Exception in thread "main" java.io.IOException: Not a file: hdfs://host:9000/user/hadoop/a

我如何递归地添加a 下的所有内容?

我一定是漏掉了一些简单的东西......

最佳答案

作为Eitan Illuz提到here , 在 Hadoop 2.4.0 中引入了一个 mapreduce.input.fileinputformat.input.dir.recursive 配置属性,当设置为 true 时指示输入格式以递归方式包含文件。

在 Java 代码中它看起来像这样:

Configuration conf = new Configuration();
conf.setBoolean("mapreduce.input.fileinputformat.input.dir.recursive", true);
Job job = Job.getInstance(conf);
// etc.

我一直在使用这个新属性,发现它运行良好。

编辑:更好的是,在 FileInputFormat 上使用这个新方法可以达到相同的结果:

Job job = Job.getInstance();
FileInputFormat.setInputDirRecursive(job, true);

关于java - 使用 FileInputFormat.addInputPaths 递归添加 HDFS 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114579/

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