2016-10-28 3 views
3

Я новичок в Hadoop и общей парадигме MapReduce. Я много искал в Интернете относительно переопределения метода setup() в классе Map для доступа к объекту конфигурации. Но из того, что я читал, кажется, что метод setup() всегда называется каждый раз при выполнении задачи.Зачем нам нужен метод setup() в MapReduce, когда мы можем инициализировать параметры в map() или reduce()?

Почему возникает необходимость в отдельном способе доступа к объекту конфигурации и инициализации параметров? Почему мы не можем сделать то же самое непосредственно в map() или reduce() методы?

Хотя оба подхода будут давать результат по мере необходимости в конце, есть ли коэффициент производительности, который входит в картину при выборе какого-либо одного подхода? Заранее спасибо.

ответ

0

Re: «Кажется, что метод setup() вызывается каждый раз при запуске задачи».

Всякий раз, когда выполняется задание, количество записей обрабатывается соответствующей задачей Map или Reduce. Метод map() или reduce() вызывается для каждой обрабатываемой записи. Однако метод setup() запускается один раз за задание, предоставляя вам возможность оптимизировать рабочий процесс, инициализируя конфигурации/ресурсы, такие как (соединение с базой данных, чтение ссылочного файла и т. Д.) Только один раз для всех записей, обрабатываемых этой задачей.

Аналогично, API обеспечивает обратный вызов с именем «очистка», где вы можете очистить ресурсы. Это будет вызываться, когда задача завершит обработку записей, выделенных для этой задачи.

0

Ответ лежит не на Hadoop, а на программировании парадигмы, на мой взгляд. Всегда полезно разделять различные части бизнес-логики, а настройка рабочей среды отличается от того, что выполняется сама карта.

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

Дизайн просто поощряет такое поведение, которое вы бы выбрали иначе.

0

Вы должны проверить в map() или reduce() ли вы уже инициализированы параметрах или нет, так что упрощает процесс инициализации для вас путем деления инициализации и фактической карта логики фаз.

0

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

+0

Конфигурация задания является глобальной и доступна для узлов, работающих на определенной фазе. Когда конкретный сопоставитель работает на узле, задается настройка класса Mapper, а затем отображается карта с соответствующим разделением. – pifta

Смежные вопросы