Несколько выходов Hadoop - PullRequest
       0

Несколько выходов Hadoop

0 голосов
/ 01 декабря 2011

Я написал некоторый код Hadoop, чтобы прочитать сопоставленный файл, разбить его на куски и записать во многие файлы следующим образом:

public void map(LongWritable key, Text value, OutputCollector<IntWritable, Text> 
output,Reporter reporter) throws IOException {
String line = value.toString();
    int totalLines = 2000;
int lines = 0;
    int fileNum = 1;
String[] linesinfile = line.split("\n");
    while(lines<linesinfile.length) {
        // I do something like, if lines = totalLines, {
        output.collect(new IntWritable(fileNum), new    
            Text(linesinfile[lines].toString()));
        fileNum++;
        lines = 0;
        }
    lines++;
   }
}

В сокращении я делаю:

public void reduce(IntWritable key, Iterator<Text> values,
OutputCollector<IntWritable, Text> output, Reporter reporter) throws IOException {
     while(values.hasNext()){
    output.collect(key, values.next());
}
}

Мой класс MultiFile выглядит следующим образом:

public class MultiFileOutput extends MultipleTextOutputFormat<IntWritable, Text> {

protected String generateFileNameForKeyValue(IntWritable key, Text content, String 
            fileName) {
    return key.toString() + "-" + fileName;
}
}

В основном я говорю:

    conf.setInputFormat(TextInputFormat.class);
    conf.setOutputFormat(MultiFileOutput.class);

помимо установки класса OutKey / Value и т. Д.

Что такоеЯ делаю не так?Мой выходной каталог всегда пуст.

Спасибо

1 Ответ

2 голосов
/ 01 декабря 2011

Программа выглядит немного сложной.Если цель состоит в том, чтобы разбить файл на несколько файлов, то это можно сделать несколькими способами.Нет необходимости в задании Map and Reduce, достаточно просто задания Map.

  • Используйте oahmapred.lib.NLineInputFormat для одновременного чтения N строк в преобразователе из входных данных.и затем запишите эти N строк в файл.

  • Установите dfs.blocksize на нужный размер файла при загрузке файла, тогда каждый преобразователь будет обрабатывать один InputSplit, который может быть записанфайл.

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