#mysql #hadoop #mapreduce
#mysql #hadoop #mapreduce
Вопрос:
Я использую hadoop для обновления некоторых записей в базе данных mysql… Проблема, которую я вижу, заключается в том, что в определенных случаях для одного и того же набора ключей запускается несколько редукторов. Я видел до 2 редукторов, работающих на разных ведомых устройствах для одного и того же ключа. Это приводит к тому, что оба редуктора обновляют одну и ту же запись в БД.
Я думал отключить режим автоматической фиксации, чтобы решить эту проблему…. но и выполняет фиксацию как часть операции «очистки» в редукторе, но задавался вопросом, что делать с редукторами, которые отстают…будет ли операция очистки по-прежнему вызываться для этого … если so….is есть способ определить, нормально ли завершился редуктор или нет, поскольку я хотел бы вызвать «откат» для редуктора (ов), которые не завершили обработку данных полностью?
Комментарии:
1. Вы задали 8 вопросов и не приняли ни одного ответа. Вам следует вернуться к своим старым вопросам и выбрать лучшие ответы, щелкнув символ галочки слева от них.
Ответ №1:
Вы можете добавить следующее свойство Map Reduce Job:
mapred.map.tasks.speculative.execution
со значением false. Это отключит спекулятивное выполнение.
Ответ №2:
Две вещи:
- Я действительно сомневаюсь, что два (РАВНЫХ) ключа внутри reduce будут разделены на разные подчиненные устройства. Поскольку используется HashPartitioner. Вы должны переопределить hashCode в вашем ключевом классе.
- У вас есть возможность установить количество задач сокращения. Это может быть сделано с помощью вызова API
Job.setNumReduceTasks(X)
. Очевидно, вы можете установить это значение равным 1.
Ответ №3:
В общем (без знания вашего варианта использования) обычно предпочтительнее избегать «побочного эффекта» с Hadoop. В основном это зависит от сторонней системы за пределами Hadoop, поскольку это может привести к снижению производительности и, возможно, к сбою системы из-за многопоточности. Я бы рекомендовал вам изучить Sqoop из Cloudera, чтобы выполнить пакетную загрузку после завершения задания по сокращению карты. Я добился хорошего успеха, используя это как массовый загрузчик.
Если вы все еще хотите индексировать напрямую из Hadoop. вы можете использовать fair-scheduler, чтобы ограничить количество картографов или редукторов, которые могут запускаться в любое время. Запустите задание с помощью mapred.queue.имя, установленное для вашей очереди с ограниченной скоростью. Вы ищете параметр maxMaps / Maxreduc.