java—在mapreduce程序中使用静态变量

nkcskrwz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(476)

我实际上在用hadoop编写程序。在reduce任务中,我必须使用一个静态变量,因为我希望它被许多线程编辑(这些线程是从reduce函数调用的)。问题是这个变量是由当前reduce任务的线程编辑的,也由其他reduce任务的线程编辑的,我想避免这种情况。
所以我的问题是:有没有一种方法或技巧可以用来修改这个变量,只通过当前reducer的线程?
我希望我的问题足够清楚,能帮助你帮助我;)。
非常感谢stack社区:)

zyfwsgd6

zyfwsgd61#

谢谢javadba,您说过reducer是独立的,是的,但是如果在同一个节点上有多个reducer,那么静态变量将被共享。所以我使用它的解决方案可能对其他人有所帮助,就是我根据唯一键的数目为每个减速机使用不同的变量。例如,如果在我的第一个程序中声明了$public static int x;$为了避免上面提到的问题,我声明$public static arraylist x;$这个arraylist中的每个元素都专用于一个独特的reducer。

py49o6xq

py49o6xq2#

您可能想查看map/reduce程序的“shared nothing”方面。它们不打算(事实上也不能…)共享jvm对象—包括静态变量。
减速器通常彼此独立。它们对在mapper阶段处理过的数据的特定分区进行操作。
在不寻常的情况下,仍然有机会使用计数器在减速器之间共享数据。但是,您更可能希望研究现有的map/reduce程序,并了解它们如何在reducer之间保持分离。

相关问题