2015-09-14 2 views
0

Я создаю простую систему мониторинга ввода-вывода для заданий MapReduce, написанных на Java. Поэтому на этапе Map задания я хочу регистрировать информацию о местонахождении обработанных данных.Какая реплика входного блока обрабатывается в mapper?

MapReduce job на этапе разделения процесса на этапе карты, который состоит из нескольких файловых блоков в HDFS. Этот блок имеет несколько (обычно 3) реплик.

Можно ли узнать, какие реплики этих блоков использовались при чтении в Mapper? Другими словами, могу ли я получить полный путь к конкретному файлу в локальной файловой системе, из которого читается Mapper?

ответ

1

В HDFS блоки реплицируются, а наменода не имеет никакой информации, на которой находится реплика. Он использует блок для выполнения операции, основанной на сетевой задержке и нагрузке на этой конкретной машине.

Файл в HDFS разделен на блоки. Полный путь к файлу в hdfs сохраняется как метаданные наменода. Каждый блок идентифицируется идентификатором блока.

Стоимость недвижимости dfs.namenode.name.dir в hdfs-site.xml дает место, где хранятся все блоки.

Исходя из вашего требования, если вы хотите получить путь в локальной файловой системе, где хранится блок, прочитайте значение этого свойства, определите идентификатор блока, прочитав метаданные namenode, тогда вы сможете найти точный блок в локальной файловой системе, который программно ссылается на файл hdfs.

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