2013-04-26 2 views
0

Для причин балансировки нагрузки я хочу создать больше разделов, чем редукторы в среде Hadoop. Есть ли способ назначить разделы конкретным редукторам, и если да, где я могу их определить. Я написал отдельного Partitioner и хочу теперь обратиться к конкретному редуктору с конкретными разделами.hadoop распределяет перегородки на редуктор

Заранее благодарю за помощь!

ответ

0

Hadoop не поддается такому контролю.

как описано на стр. 43-44 из this отличная книга. Программист имеет небольшой контроль над:

  1. Где работает преобразователь или редуктор (т. Е. На каком узле в кластере).
  2. Когда карбюратор или редуктор начинает или заканчивается.
  3. Какие пары ключ-значение ввода обрабатываются определенным устройством сопоставления.
  4. Какие промежуточные пары ключ-значение обрабатываются конкретным редуктором. (то, что вы хотели бы)

НО

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

+0

Большое вам спасибо за ваш ответ. Правильно ли, что я не смогу проанализировать данные во время функции map и после того, как все мапперы будут выполнены, рассчитать распределение данных и затем распределить их с помощью отдельного разделителя, который просто создается после все функции карты выполняются и конкретное распределение (по данным ввода) моих данных. – beto8888

+0

К сожалению, Hadoop не допускает такого контроля. Возможно, что-то в работе в следующем Hadoop YARN и MR2, так как это серьезный передел, но я не знаю об этом сегодня. Если я отвечу на ваш вопрос, пожалуйста, примите мой ответ. – Engineiro

+0

user2323063, на самом деле вы можете опробовать данные, запустив карты на части данных, а затем выложите разложенные расщепления на распределенный кеш. как это можно сделать, вы можете увидеть в приложении TeraSort http://hadoop.apache.org/docs/current/api/org/apache/hadoop/examples/terasort/package-summary.html – octo

0

Дозирование выполняется для редукторов. Поскольку количество разделов создается как количество выбранных редукторов. Вы можете выбрать количество редукторов на

job.setNumReduceTasks(n); 

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

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

+0

Благодарим за помощь. Цель создания большего количества разделов, чем редукторов, состоит в том, чтобы рассчитать размер отдельных разделов и дать редуктору более одного раздела, чтобы дать всем редукторам ту же нагрузку на работу. – beto8888

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