Java Map减少从不同格式的读取 - Avro,Textfile

时间:2015-07-09 19:51:08

标签: java hadoop mapreduce

我有一些Hive表,其中一些是Avro格式的,其中一些是纯文本文件。模式略有不同,但都包含我需要的某些属性。

我打算写一张地图减少作业处理数据。问题是我试图避免大量单独的工作,并试图尽可能地简化流程。手指交叉,我只需要写一份工作。

是否有任何示例显示如何在一个映射器中读取不同格式的输入。

比如说,我在AVRO中有一个我知道的hdfs路径,而且我还有另一个hdfs路径,其中的数据是纯文本文件。

// Pseudo code
mapper (Paths){
    for(Path in Paths){
        if Path.containsAvro() {
            ... read as avro
        } else {
            ... read as textfile
        }
        ..
    }
}

1 个答案:

答案 0 :(得分:0)

对同一作业使用两种不同的映射器,每种格式一种。映射器可以各自读取自己的数据格式,但必须都写入相同格式的数据。使用这样的配置:

MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_1), SomeInputFormat.class, ReadFormatOneMapper.class);
MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_2), SomeOtherInputFormat.class, ReadFormatTwoMapper.class);

当然,SomeInputFormat和SomeOtherInputFormat不是真正的输入格式类。在这个例子中,两个映射器类将输出具有相同kay / value类型的键/值对,如果有的话,reducer将从两个映射器中获取数据。