2011-05-17 98 views
0

我使用hadoop更新mysql数据库中的一些记录... 我看到的问题是,在某些情况下,为相同的密钥集启动多个减速器。 我见过最多2个减速器在同一个键上运行在不同的从站上。 这导致两个reducer更新数据库中的相同记录的问题。Hadoop mysql限制减速器

我正在考虑关闭自动提交模式来缓解这个问题.... 但是做了提交作为reducer中的“清理”操作的一部分,但想知道如何处理reducer(s )落后......清理操作仍然会被调用...如果是的话......是否有方法可以判断reducer是否正常完成,因为我想打开“rollback”没有完成数据处理的减速机?

+0

你有8个问题,但没有接受任何答案。您应该重新访问您的旧问题,并通过点击左侧的复选标记来选择最佳答案。 – TLP 2011-07-30 11:10:50

回答

0

您可以添加以下的Map Reduce工作性质:

mapred.map.tasks.speculative.execution 

与值设置为false。这将关闭投机执行。

0

两件事情:

  1. 我真怀疑内减少获得划分为不同的从两(等于)键。由于使用了HashPartitioner。你应该在你的关键类上重写hashCode。
  2. 您可以选择设置减少任务的数量。它可以通过对Job.setNumReduceTasks(X)的API调用完成。显然你可以设置为1.
0

一般情况下(不知道你的用例),通常最好避免使用Hadoop的“副作用”。这基本上依赖于Hadoop之外的第三方系统,因为它可能会阻碍您的性能,并可能由于线程导致系统崩溃。我建议您在Map-Reduce作业完成后调查Cloudera的Sqoop以执行批处理加载。作为散装装载机,我已经取得了很好的成功。

Sqoop Documentation

如果你仍想直接从Hadoop的指数。您可以使用fair-scheduler来限制可以随时运行的mappers或reducers的数量。将mapred.queue.name设置为限速队列启动作业。您正在查找maxMaps/maxReduces参数。

Fair Scheduler Documentation