我正在使用我的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