在配置MapReduce作业时使用多个InputFormat类

时间:2013-01-15 08:19:09

标签: java hadoop mapreduce

我想编写一个可以处理文本和zip文件的MapReduce应用程序。为此,我想使用不同的输入格式,一个用于文本,另一个用于zip。是否可以这样做?

3 个答案:

答案 0 :(得分:6)

从@ChrisWhite的回答中扩展一点,你需要的是使用适用于ZIP文件的自定义InputFormatRecordReader。您可以在此处a sample ZipFileInputFormat和此处a sample ZipFileRecordReader找到。

鉴于此,正如Chris所建议的那样,你应该使用MultipleInputs,如果你不需要每种类型文件的自定义映射器,我就会这样做:

MultipleInputs.addInputPath(job, new Path("/path/to/zip"), ZipFileInputFormat.class);
MultipleInputs.addInputPath(job, new Path("/path/to/txt"), TextInputFormat.class);

答案 1 :(得分:3)

查看MultipleInputs的API文档(old apinew api)。不是很自我解释,但你应该能够看到你在作业配置中调用addInputPath方法并配置输入路径(可以是glob,输入格式和相关的映射器)。

你应该能够向谷歌提供一些例子,事实上这里有一个显示一些用法的SO question / answer

答案 2 :(得分:0)

考虑编写一个自定义InputFormat,您可以在其中检查正在读取的输入类型,然后根据检查调用所需的InputFormat