我正在使用我的reducer将数据输入到MySQL中。 我担心的是,在某些情况下,同一个密钥会同时启动多个reducer。在这种情况下,数据库可能会被相同的数据更新两次。 有没有办法防止这种情况发生?使用Hadoop更新MySQL
在这种情况下关闭SQL连接中的自动提交模式是否合理?
我正在使用我的reducer将数据输入到MySQL中。 我担心的是,在某些情况下,同一个密钥会同时启动多个reducer。在这种情况下,数据库可能会被相同的数据更新两次。 有没有办法防止这种情况发生?使用Hadoop更新MySQL
在这种情况下关闭SQL连接中的自动提交模式是否合理?
我觉得这种情况与自动提交没有任何关系。如果它们不是太多,并且不花费大量的开销,那么忽略它们是因为它们不会破坏一致性。你所有的reducer都在执行SQL查询,你怎么能阻止他们为同一个键执行查询?我认为你应该在你的mapreduce函数中解决这个问题,因为这不是DBMS可以处理的情况,因为它所做的只是在数据库中执行给定的查询。
您可以更改设置:
mapred.reduce.tasks.speculative.execution
这将禁用reduce任务,如果这是你案件的推测执行。
的另一种方式,我建议是使用Sqoop写入到MySQL:http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html#_literal_sqoop_export_literal
这是正确的答案....它解决了这个问题 – griffin 2011-05-17 22:46:11
找到了解决办法...这是关闭推测执行
的问题基本上是由运行在2个减速引起的同样的密钥集...所以唯一可用的其他解决方案可能有一些没有发生......但不知道我是否可以配置hadoop来做到这一点。 – griffin 2011-05-17 00:19:25