当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用FileInputFormat.addInputPaths递归添加HDFS路径》经验,为你挑选了1个好方法。

我有一个类似的HDFS结构

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

我使用的是经典模式

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

设置我的Java映射减少作业的输入路径。

如果我将args [0]指定为a / b,则效果很好,但如果仅指定a(我的意图是要处理所有4个文件),它将失败

错误是

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

如何将所有内容递归添加

我一定错过了一些简单的事情...



1> Josh Hansen..:

正如Eitan Illuz在此所述,在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);

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有