Hadoop MapReduce - 每个输入的一个输出文件

spo*_*oky 5 java hadoop mapreduce

我是Hadoop的新手,我正试图弄清楚它是如何工作的.至于练习,我应该实现类似于WordCount-Example的东西.任务是读入几个文件,执行WordCount并为每个输入文件写一个输出文件.Hadoop使用组合器并将map-part的输出作为reducer的输入进行混洗,然后写入一个输出文件(我想每个正在运行的实例).我想知道是否可以为每个输入文件写一个输出文件(所以保留inputfile1的单词并将结果写入outputfile1,依此类推).是否有可能覆盖Combiner-Class或者是否存在另一种解决方案(我不确定这是否应该在Hadoop-Task中解决,但这是练习).

谢谢...

Pra*_*ati 1

map.input.file环境参数具有映射器正在处理的文件名。在映射器中获取该值,并将其用作映射器的输出键,然后将单个文件中的所有 k/v 发送到一个缩减器。

映射器中的代码。顺便说一句,我正在使用旧的 MR API

@Override
public void configure(JobConf conf) {
    this.conf = conf;
}

@Override.
public void map(................) throws IOException {

        String filename = conf.get("map.input.file");
        output.collect(new Text(filename), value);
}
Run Code Online (Sandbox Code Playgroud)

并使用 MultipleOutputFormat,这允许为作业写入多个输出文件。文件名可以从输出键和值中得出。