как дать собственное имя выходным файлам hadoop - PullRequest
10 голосов
/ 18 января 2012

Мне нужны выходные файлы в формате 2012117-part-r-00000.По сути, я хочу, чтобы к выходному файлу была добавлена ​​дата, чтобы я мог расположить файлы по дате.Я посмотрел на OutputFormat и FileOutputFormat, но это не помогает моему делу.

Ответы [ 5 ]

5 голосов
/ 26 января 2012

Я только что узнал о новом API, я могу использовать org.apache.hadoop.mapreduce.lib.output.MultipleOutputs и метод addNamedOutput ()

5 голосов
/ 18 января 2012

Имя выходного файла задания MR не очень гибкое.Используйте подклассы MultipleOutputFormat .

Необходимо реализовать метод MultipleOutputFormat # generateFileNameForKeyValue , игнорировать входные данные этого метода и возвращать строку в date + -part-r- + mapred.task.partitionшаблон. mapred.task.partition - это целое число, поэтому его необходимо предварительно дополнить нулями.

4 голосов
/ 18 марта 2018

Существует 2 способа изменить имя выходного файла.

1. Используя класс Java MultipleOutputFormat.

// job.setOutputFormatClass(TextOutputFormat.class);
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
MultipleOutputs.addNamedOutput(job,“20180318”, TextOutputFormat.class, Text.class, IntWritable.class);

2. Используя

job.getConfiguration().set(“mapreduce.output.basename”, “20180318”);

Ссылка на ссылку: http://data -flair.training / forums / topic / in-mapreduce-in-map-re-change-to-name-of-output-file-from-part-r-00000

1 голос
/ 19 марта 2018

Это может быть достигнуто с помощью Multiple Output Format в классе Mapper / Reducer.Например:

import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;

Создать объект MultipleOutputs в классе Mapper / Reducer.

private MultipleOutputs<Text, NullWritable> _multipleOutputs;

В настройках вы можете сделать:

_multipleOutputs = new MultipleOutputs<Text, NullWritable>(context);

и затем, в методе map / lower, вы можете сделать:

_multipleOutputs.write(new Text(whatever you want to emit),new Text(whatever you want to emit),"xyz-m");

Это даст вам имена файлов, такие как xyz-m-00000 и т. д.

0 голосов
/ 28 сентября 2018

Если вы хотите добавить дату к выходным файлам, используйте Несколько выходов Apache Hadoop

Вот пример кода для ознакомления:

MultipleOutputs<Text, Text> mos;

@Override
public void setup(Context context) {
    mos = new MultipleOutputs(context);
}

private IntWritable totalCommits = new IntWritable();

@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context)
        throws IOException, InterruptedException {
    int Count = 0;
    for (IntWritable val : values) {
        Count += val.get();
    }
    totalCommits.set(Count);
    String[] keySplit = key.toString().split(",");

    mos.write(new Text(keySplit[1]), new Text(totalCommits.toString()),keySplit[0]);
}

@Override
protected void cleanup(Context context) throws IOException, InterruptedException {
    mos.close();
}

Метод write должен иметь параметры в следующей последовательности: ключ, значение, имя файла .
Тип Key и Value должен совпадать с объявлением типа в первой строке кода, а имя файла должно быть String. Обратите внимание, что в имени файла нельзя указывать специальные символы, такие как «-», «:» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...