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

#mysql #hadoop #mapreduce

#mysql #hadoop #mapreduce

Вопрос:

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

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

Комментарии:

1. Вы задали 8 вопросов и не приняли ни одного ответа. Вам следует вернуться к своим старым вопросам и выбрать лучшие ответы, щелкнув символ галочки слева от них.

Ответ №1:

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

 mapred.map.tasks.speculative.execution
  

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

Ответ №2:

Две вещи:

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

Ответ №3:

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

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

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

Честная документация планировщика