Отвечает ли формат ввода за реализацию локальности данных в MapReduce Hadoop? - PullRequest
4 голосов
/ 25 мая 2011

Я пытаюсь понять локальность данных, поскольку она относится к инфраструктуре Hadoop Map / Reduce.В частности, я пытаюсь понять, какой компонент обрабатывает локальность данных (т. Е. Является ли он форматом ввода?)расположение данных / записей с использованием знаний из распределенной файловой системы. "Похоже, это подразумевает, что входной формат HDFS, возможно, запросит узел имени, чтобы определить, какие узлы содержат требуемые данные, и запустит задачи отображения на этих узлах, если это возможно.Можно предположить, что аналогичный подход может быть использован с HBase путем запроса, чтобы определить, какие регионы обслуживают определенные записи.

Если разработчик напишет свой собственный формат ввода, будет ли он отвечать за реализацию локальности данных?

Ответы [ 2 ]

7 голосов
/ 25 мая 2011

Ты прав.Если вы смотрите на класс FileInputFormat и метод getSplits().Он ищет блокировки:

BlockLocation[] blkLocations = fs.getFileBlockLocations(file, 0, length);

Это подразумевает запрос FileSystem.Это происходит внутри JobClient, результаты записываются в SequenceFile (на самом деле это просто необработанный байтовый код).Таким образом, Jobtracker читает этот файл позже во время инициализации задания и в значительной степени просто назначает задачу входному разделу.

НО распределение данных - это задание NameNodes.

На ваш вопрос сейчас: Обычно вы расширяетесь от FileInputFormat.Таким образом, вы будете вынуждены вернуть список InputSplit, и на этапе инициализации для такой вещи необходимо указать местоположение разбиения.Например, FileSplit:

public FileSplit(Path file, long start, long length, String[] hosts)

Таким образом, на самом деле вы сами не реализуете локальность данных, а просто указываете, на каком хосте можно найти разделение.Это легко запрашивается с помощью интерфейса FileSystem.

0 голосов
/ 25 мая 2011

Мое понимание состоит в том, что локальность данных определяется совместно HDFS и InputFormat.Первый определяет (через осведомленность о стойке) и сохраняет расположение блоков HDFS в датоданных, а второй определяет, какие блоки связаны с каким разделением.Jobtracker попытается оптимизировать, какие разбиения доставляются для какой задачи сопоставления, следя за тем, чтобы блоки, связанные для каждого разбиения (1 сопоставление разбиения на 1 сопоставления задач), были локальными для отслеживания заданий.

К сожалению, этот подход к гарантированию локальности сохраняется в однородных кластерах, но будет разбиваться на неоднородные, то есть те, где существуют жесткие диски разных размеров на датододу.Если вы хотите углубиться в это, вам следует прочитать эту статью ( Повышение производительности MapReduce за счет размещения данных в гетерогенных кластерах hadoop ), которая также затрагивает несколько тем, касающихся вашего вопроса.

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