Использование Hadoop для обновления MySQL

#mysql #hadoop

#mysql #hadoop

Вопрос:

Я использую свои редукторы для ввода данных в MySQL. Меня беспокоит то, что в некоторых случаях несколько редукторов запускаются для одного и того же ключа одновременно. В этом случае есть вероятность, что база данных может быть обновлена дважды одними и теми же данными. Есть ли способ защититься от этого?

Имеет ли смысл отключить режим автоматической фиксации в соединении SQL в этом случае?

Ответ №1:

Вы можете изменить настройку:

 mapred.reduce.tasks.speculative.execution
  

Это отключило бы спекулятивное выполнение задач сокращения, если это ваш случай.

Другой способ, который я бы предложил, — использовать Sqoop для записи в MySQL:http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html#_literal_sqoop_export_literal

Ответ №2:

Я думаю, что эта ситуация не имеет ничего общего с автоматическими фиксациями. Если их не слишком много и они не требуют значительных накладных расходов, то игнорируйте их, потому что они не нарушат согласованность. Все ваши редукторы выполняют SQL-запросы, как вы можете запретить им выполнять запросы для одних и тех же ключей? Я думаю, вам следует решить эту проблему в вашей функции mapreduce, потому что это не тот случай, с которым может справиться СУБД, поскольку все, что она делает, это выполняет заданный запрос в базе данных.

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

1. Проблема, по сути, вызвана двумя редукторами, работающими по одному и тому же ключу set…so единственное доступное решение может заключаться в том, чтобы у некоторых этого не произошло… но не уверен, смогу ли я настроить hadoop для этого.

Ответ №3:

Найдено решение…это отключало спекулятивное выполнение