Подтвердить что ты не робот

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

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

что

setJarByClass 

public void setJarByClass(Class<?> cls)

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Надеюсь, это разъяснит!

Ответ 3

job.setJarByClass(WordCount.class);

Помогает идентифицировать Jar, который содержит Mapper и Reducer, задав класс в этом Jar.