Hadoop mysql, ограничивающий редукторы

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

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


person griffin    schedule 17.05.2011    source источник
comment
Вы задали 8 вопросов и не приняли ни одного ответа. Вы должны вернуться к своим старым вопросам и выбрать лучшие ответы, щелкнув символ галочки слева от них.   -  person TLP    schedule 30.07.2011


Ответы (3)


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

mapred.map.tasks.speculative.execution

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

person akshat    schedule 29.07.2011

Две вещи:

  1. Я действительно сомневаюсь, что два (равных) ключа внутри сокращения будут разделены на разные ведомые устройства. Поскольку используется HashPartitioner. Вы должны переопределить hashCode в своем ключевом классе.
  2. У вас есть возможность установить количество задач сокращения. Это можно сделать с помощью API-вызова Job.setNumReduceTasks(X). Очевидно, вы можете установить это значение равным 1.
person Thomas Jungblut    schedule 17.05.2011

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

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

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

Документация по Fair Scheduler

person Jeremy Carroll    schedule 18.05.2011