Hadoop数据从两个文件连接 - 如何强制映射器读取特定文件

时间:2014-05-12 02:54:25

标签: java hadoop mapreduce hdfs

我正在尝试在hadoop中编写数据连接Map Reduce作业。我觉得我很接近,但是我遇到了阻止map1进入map2的问题。

我有两个映射器和一个reduce,我试图强制Map1从一个文件读取,同时强制Map2从另一个文件读取。我想在reducer中解析结果以格式化连接输出。

我知道默认情况下,当在作业中链接映射器时,作业的输出将是下一个的输入,我知道这可以被覆盖但是不成功。来自map1的数据被确认为送入map2。

这就是我以为我应该指定单个映射器的输入路径:

        //Setting Configuration for map2
        JobConf map2 = new JobConf(false);
        String[] map2Args = new GenericOptionsParser(map2, args).getRemainingArgs();
        FileInputFormat.setInputPaths(map2, new Path(map2Args[1]));
        ChainMapper.addMapper(  conf,
                                Map2.class,
                                LongWritable.class,
                                Text.class,
                                Text.class,
                                Text.class,
                                true,
                                map2);

conf是主要作业配置,args由3个值组成。第一个值是输入文件,第二个值是输入文件,第三个值是预期的输出文件。

在hadoop中处理数据连接和多个映射器时,为单个映射器指定输入路径的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

这种情况可以通过使用多输入格式来解决。使用这种输入格式,我们可以读取两个不同格式的文件,两者的结果合并到reducer作业。

概念和示例的简要说明在以下链接中给出。

https://github.com/subbu-m/MultipleInputFormat

我希望这些信息有所帮助。