Может ли Hadoop распределять задачи и кодовую базу? - PullRequest
6 голосов
/ 17 февраля 2012

Я начинаю играть с hadoop (но пока не имею доступа к кластеру, поэтому просто играю в автономном режиме).Мой вопрос заключается в том, как после настройки кластера как распределяются задачи и может ли база кода переноситься на новые узлы?

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

Любые предложения или советы, если это возможно, было бы замечательно!

Спасибо.

Ответы [ 4 ]

7 голосов
/ 17 февраля 2012

Когда вы планируете задание mapreduce с помощью команды hadoop jar, средство отслеживания заданий определяет, сколько картографов необходимо для выполнения вашей работы. Обычно это определяется количеством блоков во входном файле, и это число является фиксированным, независимо от того, сколько у вас рабочих узлов. Затем он привлечет одного или нескольких треккеров для выполнения вашей работы.

Jar-приложение (вместе с любыми другими jar-файлами, указанными с помощью аргумента -libjars) автоматически копируется на все машины, на которых работают средства отслеживания задач, используемые для выполнения ваших jar-файлов. Все это обрабатывается инфраструктурой Hadoop.

Добавление дополнительных средств отслеживания задач увеличит параллелизм вашей работы , если предположить, что есть еще незапланированные задачи сопоставления. Чего он не будет делать, так это автоматического перераспределения ввода для распараллеливания по дополнительной емкости карты. Таким образом, если у вас есть емкость карты 24 (при условии 6 картографов на каждом из 4 узлов данных), и у вас есть 100 задач карты с выполнением первых 24, и вы добавите еще один узел данных, вы получите некоторую дополнительную скорость. Если у вас есть только 12 картографических задач, добавление машин вам не поможет.

Наконец, вам необходимо знать местность ссылок на данные. Поскольку в идеале данные должны обрабатываться на тех же машинах, на которых они изначально хранятся, добавление новых средств отслеживания задач не обязательно приведет к пропорциональной скорости обработки, поскольку данные изначально не будут локальными на этих узлах и их необходимо будет копировать по сети.

1 голос
/ 16 июня 2012

Я не совсем согласен с ответом Даниила.В первую очередь потому, что если «при запуске задания jar-код будет скопирован на все узлы, о которых знает кластер», это правда, то даже если вы используете 100 сопоставителей и 1000 узлов, код для всех заданий будет всегда копироваться на всеузлы.Не имеет смысла.

Вместо этого, ответ Криса Шейна имеет больше смысла, что всякий раз, когда JobScheduler в JobTracker выбирает задание для выполнения и определяет задачу, которая должна быть выполнена определенным датодетом, тогда в это время каким-то образом он передает TaskTracker изкуда копировать кодовую базу.

Изначально (до начала задания mapreduce) кодовая база была скопирована в несколько мест, как определено параметром mapred.submit.replication.Следовательно, TaskTracker может скопировать кодовую базу из нескольких мест, список которых может быть отправлен на нее Jobtracker.

0 голосов
/ 18 февраля 2012

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

В настоящее время я работаю над структурой Nested Map-Reduce, которая расширяет кодовую базу Hadoop и позволяет создавать больше узлов на основе входных данных, которые получает преобразователь или преобразователь.Если вы заинтересованы, напишите мне, и я объясню больше.

Кроме того, когда дело доходит до опции -libjars, это работает только для узлов, которые назначены JobTracker, как указано в задании, которое вы пишете.Поэтому, если вы укажете 10 картографов, -libjar скопирует ваш код туда.Если вы хотите начать с 10, но продолжить работу, добавленные узлы не будут иметь кода.

Самый простой способ обойти это - добавить свой jar в путь к классу сценария hadoop-env.sh.Это всегда будет при запуске задания копировать этот jar на все узлы, которые кластер знает.

0 голосов
/ 17 февраля 2012

Прежде чем пытаться построить кластер Hadoop, я бы предложил поиграть с Hadoop, используя Amazon Elastic MapReduce .

Что касается проблемы, которую вы пытаетесь решить, я не уверен, чтоHadoop подходитHadoop полезен для тривиально распараллеливаемых пакетных заданий: анализ документов (или более тысяч), сортировка, перегруппировка данных).Потоковая передача Hadoop позволит вам создавать мапперы и редукторы на любом языке, который вам нравится, но входы и выходы должны быть в фиксированном формате.Существует множество применений, но, на мой взгляд, управление процессом не было одной из целей проектирования.

[ПРАВИТЬ] Возможно ZooKeeper ближе к тому, что вы ищете.

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