Hadoop mysql, ограничивающий редукторы - PullRequest
0 голосов
/ 17 мая 2011

Я использую hadoop для обновления некоторых записей в базе данных mysql ... Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых случаях запускается несколько редукторов для одного и того же набора ключей.Я видел до двух редукторов, работающих на разных ведомых для одного и того же ключа.Это приводит к тому, что оба редуктора обновляют одну и ту же запись в БД.

Я думал об отключении режима автоматической фиксации, чтобы облегчить эту проблему ... но и делал коммит как часть "очистки"."операция в редукторе, но мне было интересно, что делать с отстающими редуктором (ами) ... будет ли для этого все же вызвана операция очистки ... если так ... есть ли способ определить,редуктор закончил нормально или нет, так как я хотел бы вызвать «откат» для редуктора (ов), который не завершил обработку данных полностью?

Ответы [ 3 ]

0 голосов
/ 18 мая 2011

В целом (не зная вашего варианта использования), обычно предпочтительнее избегать "Побочного эффекта" с Hadoop. Это в основном полагается на стороннюю систему за пределами Hadoop, поскольку она может ограничить вашу производительность и потенциально опрокинуть систему из-за многопоточности. Я бы порекомендовал вам исследовать Sqoop от Cloudera, чтобы выполнить пакетную загрузку после завершения задания сокращения карты. У меня был хороший успех, используя это в качестве массового погрузчика.

Документация Sqoop

Если вы все еще хотите индексировать напрямую из Hadoop. Вы можете использовать честный планировщик, чтобы ограничить число картографов или редукторов, которые могут работать в любое время. Начните работу с mapred.queue.name, установленным в вашу очередь с ограниченной скоростью. Вы ищете параметр maxMaps / maxReduces.

Документация честного планировщика

0 голосов
/ 30 июля 2011

Вы можете добавить следующее свойство Map Reduce Job:

mapred.map.tasks.speculative.execution

со значением false. Это отключит спекулятивное исполнение.

0 голосов
/ 17 мая 2011

Две вещи:

  1. Я действительно сомневаюсь, что два (РАВНЫХ) ключа внутри редуктора распределяются между разными рабами. Так как HashPartitioner используется. Вы должны переопределить hashCode в своем классе ключей.
  2. У вас есть возможность установить количество задач сокращения. Это можно сделать с помощью вызова API для Job.setNumReduceTasks(X). Очевидно, вы можете установить это в 1.
...