hadoop中的多个输入目录

时间:2013-11-21 20:56:57

标签: hadoop

所以,我有两个不同的目录..我想以不同的方式处理... 为了这份工作,我必须为其工作..

数据1 DATA2

并在我的驱动程序中..我添加以下内容:

MultipleInputs.addInputPath(job, new Path( args[0]), 
                                    TextInputFormat.class, 
                                    Data1.class);


    MultipleInputs.addInputPath(job, new Path(args[1]),
                                TextInputFormat.class,
                                Data2.class);

但我现在想要的只是从中选择两个文件..

所以..通常我们会这样做

FileInputFormat.addInputPaths(job,"Data1/part-00000,Data1/part-00000");

但..如何在MultiInputs对象中指定特定文件。

基本上......两个映射器..处理两个不同的输入......但是我想指定两个目录中的哪些文件要读取以供映射器处理。 我如何在hadoop中做到这一点?

1 个答案:

答案 0 :(得分:0)

两次调用addInputPath:

MultipleInputs.addInputPath(job, new Path("Data1/part-00000"),
                            TextInputFormat.class,
                            Data2.class);
MultipleInputs.addInputPath(job, new Path("Data1/part-00002"),
                            TextInputFormat.class,
                            Data2.class);

此调用的效果仅仅是“将带有自定义InputFormat的路径添加到map-reduce作业的输入列表中”。如果某些路径具有相同的InputFormat,那应该没问题。

如果你有很多这样的文件,你可以把它们放在一个列表中并循环遍历它们。

FileInputFormat also has a setInputPathFilter method。我实际上并不完全知道MultipleInputs如何与FileInputFormat一起工作,但您可以尝试使用您想要的任何路径过滤逻辑来实现PathFilter类,如果您可以通过简单地使用正则表达式或简单规则来选择所有预期的部分,这可能会更好