静态变量在mapreduce程序中的使用



我实际上在hadoop上编写程序。在我的减少任务,我必须使用一个静态变量,因为我希望它被许多线程编辑(这些线程从减少函数调用)。问题是这个变量正在被当前reduce任务的线程和其他reduce任务的线程编辑,我想避免这种情况。

所以我的问题是:是否有一种方法或技巧可以用来修改这个变量仅通过当前减速器的线程?

我希望我的问题足够清楚,可以帮助你帮助我;)。

非常感谢stack-community:)

您可能想要回顾map/reduce程序的"无共享"方面。它们不打算(事实上也不能够……)共享JVM对象——包括静态变量。

减速器通常是相互独立的。它们对在Mapper阶段处理过的数据的特定分区进行操作。

在不寻常的情况下,仍然有机会使用counter在reducer之间共享数据。然而,你更可能想要研究现有的map/reduce程序,看看它们是如何维护reducer之间的分离的。

谢谢javadba,你说减速器是独立的,是的,但是如果在同一节点上执行多个减速器,那么静态变量将被共享。所以我使用的解决方案,它可能会帮助别人是我使用不同的变量为每个减速器根据唯一键的数量。例如,如果在我的第一个程序中声明了$public static int x;为了避免我上面提到的问题,我声明$public static ArrayList x;

相关内容

  • 没有找到相关文章