Как класс Mapper идентифицирует SequenceFile как входной файл в hadoop?

В моей единственной задаче MapReduce я переопределяю BytesWritable как KeyBytesWritable и переопределяю ByteWritable как ValueBytesWritable. Затем я вывожу результат, используя SequenceFileOutputFormat.

Мой вопрос: когда я запускаю следующую задачу MapReduce, я хочу использовать этот SequenceFile в качестве входного файла. Итак, как я могу установить класс задания и как класс Mapper может идентифицировать ключ и значение в SequenceFile, которые я переопределил ранее?

Я понимаю, что я мог SequenceFile.Reader прочитать ключ и значение.

Configuration config = new Configuration();
Path path = new Path(PATH_TO_YOUR_FILE);
SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
Writable value = (Writable) reader.getValueClass().newInstance();
while (reader.next(key, value))

Но я не знаю, как использовать этот Reader для передачи ключа и значения в класс Mapper в качестве параметров. Как я могу установить conf.setInputFormat в SequenceFileInputFormat, а затем позволить Mapper получить ключ и значения?

Спасибо


person JoJo    schedule 02.03.2013    source источник


Ответы (1)


Вам не нужно вручную читать файл последовательности. Просто установите класс формата ввода в файл последовательности:

job.setInputFormatClass(SequenceFileInputFormat.class);

и установите входной путь к каталогу, содержащему файлы вашей последовательности.

FileInputFormat.setInputPaths(<path to the dir containing your sequence files>);

Вам нужно будет обратить внимание на типы (Key, Value) входных данных для параметризованных типов вашего класса Mapper, чтобы они соответствовали кортежам (key, value) внутри вашего файла последовательности.

person WestCoastProjects    schedule 02.03.2013
comment
Сейчас попробую настроить по вашему совету. - person JoJo; 05.03.2013