2016-03-20 1 views
0

Как мы знаем в MapReduce от Hadoop, преобразователь считывает из блока, который хранится в узле в HDFS. Но как собственно картограф читает блок? Должен ли блок посылать байты непрерывно в устройство отображения до тех пор, пока картограф не достигнет размера разделения? Или он делает что-то еще?Hadoop java-файл, который содержит считыватель карт из блока

Если да, то в каком java-файле это происходит? Кроме того, я использую Hadoop 2.7.1, на всякий случай.

ответ

2

Hadoop MapReduce Форматы задания входных данные содержит два основных компонента:

InputSplit: Разделить источники данных ввода (например, входные файлы) на фрагменты, которые составляют вклад в отдельные задачи карты. Эти фрагменты называются «расколами». Большинство файлов, например, разделяются на границах базовых блоков в HDFS и представлены экземплярами класса FileInputSplit. Логика разделения разбиения файла реализована через InputSplit.

RecordReader: считывает данные из Split и отправляет на работу по уменьшению карты. TextInputFormat делит файлы на разделы строго на байтовые смещения. Смещение конца раскола может быть в середине строки. В этом случае мы должны реализовать логику в RecordReader для чтения данных из следующего разделения до тех пор, пока конец строки не будет повторно использован, и передадим его текущему картографу.

Для получения более подробной информации, пожалуйста, обратитесь к этому link.

+0

я проверил RecordReader.java и InputSplit.java и есть нет фрагмент кода, который показывает любую подсказку некоторого типа, в то время как цикл, который читает до конца файла. – IFH

+0

И RecordReader.java, и InputSplit.java - это интерфейсы, вы должны проверить реализацию любого входного формата, такого как TextInputFormat для класса, который реализует эти интерфейсы. – donut

2

InputFormat описывает спецификацию ввода задания Map-Reduce. Рамки Map-Reduce опирается на InputFormat задания на:

  1. Validate ввод-спецификация работы.
  2. Разбить входной файл (ы) на логический InputSplits, каждый из которых затем присваивается отдельному Mapper.
  3. Обеспечить реализацию RecordReader, которая будет использоваться для ввода записей ввода из логического InputSplit для обработки Mapper.

InputSplit представляет данные, подлежащие обработке отдельным лицом Mapper.

Посмотрите на код FileInputFormat, чтобы понять, как работает сплит.

API:

public List<InputSplit> getSplits(JobContext job 
            ) throws IOException { 

RecordReader разбивает данные на пары ключ/значение для ввода в Mapper.

Существует несколько типов RecordReader.

CombineFileRecordReader, CombineFileRecordReaderWrapper, ComposableRecordReader, 
DBRecordReader, KeyValueLineRecordReader, SequenceFileAsTextRecordReader, 
SequenceFileRecordReader 

Чаще всего не используется один: KeyValueLineRecordReader

взглянуть на соответствующий вопрос SE для лучшего понимания о внутренностях чтения: How does Hadoop process records split across block boundaries?

+0

Я передал сжатый текстовый файл в HDFS, который RecordReader использует, когда я запускаю на нем задание WordCount? – IFH

+0

CustomFileInputFormat & CustomLineReader. Взгляните на эти два искусства: https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/ и http://cutler.io/2012/07/hadoop-processing-zip-files -in-mapreduce/ –

+0

Кажется, я не могу найти CustomFileInputFormat и CustomLineReader (Hadoop 2.7.1). Я понимаю, что это то, что использует одна из ссылок, но которая использует Hadoop? – IFH

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

  • Нет связанных вопросов^_^