#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:
Найдено решение…это отключало спекулятивное выполнение