2014-02-05 2 views
1

Можно ли разделить вывод задания mapreduce на несколько файлов вместо одного файла «part-r-00000»?Splittig MapReduce вывод в несколько выходных файлов

Я столкнулся с классом MultipleOutputFormat, но из того, что я прочитал, кажется, что он только разбивает вывод на файлы на основе ключа. MultipleOutputFormat

Я ищу, чтобы взять работу WordCount в качестве примера, чтобы просто разделить вывод на более чем 1 файл.

ответ

1

Простите меня, но обычно вы получаете столько файлов part-rnnnnn, сколько у вас есть задачи редуктора. Если в примере подсчета слов настроен только один редуктор, все, что вам нужно сделать, это настроить более одного (mapred.reduce.tasks или эквивалент Hadoop 2).

+0

Спасибо. Я понимаю, что всегда оставил задачи редуктора по умолчанию без установки значения, поэтому он всегда был 1. – Koh

2

У меня есть аналогичная проблема с Wordcount. В моем случае мне нужно написать слова начинается с каждой буквы в отдельные файлы. Вот я использовал MultipleOutputs.

public class NameCountReducer extends Reducer<Text, NameCountTuple, Text, NameCountTuple> { 
private NameCountTuple result = null; 
private MultipleOutputs<Text,NameCountTuple> out; 

public void setup(Context context) { 
    out = new MultipleOutputs<Text,NameCountTuple>(context); 
} 
public void reduce(Text key, Iterable<NameCountTuple> values, Context context) 
     throws IOException, InterruptedException { 
    int count = 0; 
    for (HITuple val : values) { 

     count += val.getCount(); 
    } 
    result.setCount(count); 
    out.write(key, result,"outputpath/"+key.getText().charAt(0)); 
} 
public void cleanup(Context context) throws IOException,InterruptedException { 
    out.close();   
} 

}

Здесь он дает выход в следующих путей как

outputpath/a 
      /b 
      /c 
....... 

Для этого вы должны использовать LazyOutputFormat.setOutputFormatClass() вместо FileOutputFormat. Также необходимо добавить конфигурацию задания как job.setOutputFormatClass(NullOutputFormat.class)

+0

привет @TomSebastian. Спасибо вам за помощь. На самом деле мое задание MapReduce - это простое задание поиска, и поэтому он запускает задачи карты без задач сокращения, и я просто хотел, чтобы он выводил все результаты поиска в несколько выходных файлов. Тем не менее, спасибо за информацию. Вероятно, будет использоваться, поскольку я продолжаю строить программу. – Koh

-1

Благодарим вас за вышеуказанные предложения.

Работа с MapReduce У меня есть просто простое задание поиска, при этом задачи карты извлекают строки ввода, соответствующие определенному условию. А затем просто вывести этот результат, не выполняя никаких задач сокращения.

Первоначально я не задал число сокращений задач и из выходных журналов, я видел, что по умолчанию он равен 1. Я пытался установить большее число, но как-то он создает несколько выходных файлов (part-000xx), но только один из выходных файлов будет иметь все результаты, а остальные - только пустые файлы.

Тогда, когда я установил это ниже, это сработало. С каждым результатом сокращения задач вывод является окончательным выходным файлом. Я не совсем уверен, что это правильный способ сделать это, но я возьму его сейчас в качестве обходного

conf.set («mapred.reduce.tasks», «0»)

Смежные вопросы