Как рассчитываются местоположения на входных разделениях

В "Hadoop - Полное руководство" говорится ->

Клиент, выполняющий задание, вычисляет разбиения для задания, вызывая getSplits(), а затем отправляет их в отслеживатель заданий, который использует свои места хранения для планирования задач сопоставления для обработки их в средствах отслеживания заданий.

public abstract class InputSplit { 
public abstract long getLength() throws IOException, InterruptedException; 
public abstract String[] getLocations() throws IOException,
}

Мы знаем, что getLocations() возвращает массив имен хостов.

Вопрос 1: Как клиент узнает, какие имена хостов возвращать. Разве это не работа трекера?

Вопрос 2: могут ли два разных объекта InputSplit возвращать одно и то же имя хоста? Как определяются имена хостов? Кто так делает?

Я чувствую, что клиент связывается с namenode, чтобы получить все имена хостов файла (включая реплики), выполняет некоторые математические операции, чтобы получить местоположение, установленное для каждого входного разделения. Это правда?

1 ответ

Q Как клиент знает, какие имена хостов возвращать. Разве это не работа трекера?

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

Вопрос 2: могут ли два разных объекта InputSplit возвращать одно и то же имя хоста? Как определяются имена хостов? Кто так делает?

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

Надеюсь это поможет.

Другие вопросы по тегам