Запрос Hadoop относительно метода setJarByClass класса Job

В документации по Hadoop API

тот

setJarByClass 

public void setJarByClass(Class<?> cls)

Set the Jar by finding where a given class came from.

Что именно означает это объяснение? это создает файл JAR из аргумента файла класса, указанного в методе выше? и выполняется ли этот файл jar для задачи MapReduce?

3 ответа

Решение

Этот метод устанавливает файл jar, в котором каждый узел будет искать классы Mapper и Reducer.

Он не создает банку из данного класса. Скорее, он идентифицирует банку, содержащую данный класс. И да, этот файл JAR "выполняется" (в действительности выполняются Mapper и Reducer в этом файле JAR) для задания MapReduce.

(Также см . Ответ Стэнли Сюй на аналогичный вопрос о необходимости этого метода, поскольку вы задаете банку в командной строке)

Обратите внимание, что вышеуказанный метод класса Job вызывается в драйвере. Ваш драйвер вызывается из клиента, обычно это ваш рабочий стол или пограничный компьютер, который не является частью кластера, и ваши классы (в jar-файлах) будут находиться на этом компьютере. Чтобы ваше задание mapreduce выполнялось в кластере, вам необходимо отправить свой Mapper, редуктор и любые другие необходимые классы в кластер с вашего клиентского компьютера. Ваш класс драйверов заботится об отправке JAR-файла, содержащего необходимые классы, в кластер. Какой JAR-файл необходимо отправить, так как драйвер не знает, какой из них следует отправить из кучи JAR-файлов, которые есть в пути к классу вашего драйвера. Это делается с помощью метода setJarByClass или setJar или любого другого варианта аналогичного метода в классе Job.

Очевидно, что если вы не укажете это, то, что не вызывает этот метод или не комментирует его, приведет к исключению ClassNotFound на подчиненных узлах.

Надеюсь, что это проясняет!

job.setJarByClass(WordCount.class);

Помогает определить банку, которая содержит Mapper а также Reducer указав класс в этом банке.

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