Java mapreduce程序中静态变量的使用
我实际上在hadoop上编写一个程序。在我的reduce任务中,我必须使用一个静态变量,因为我希望它被许多线程编辑(这些线程是从reduce函数调用的)。 问题是这个变量正在被当前reduce任务的线程以及其他reduce任务的线程编辑,我想避免这种情况 所以我的问题是:有没有一种方法或技巧可以用来只通过当前减速机的线程来修改这个变量 我希望我的问题足够清楚,能帮助你帮助我Java mapreduce程序中静态变量的使用,java,multithreading,hadoop,static,mapreduce,Java,Multithreading,Hadoop,Static,Mapreduce,我实际上在hadoop上编写一个程序。在我的reduce任务中,我必须使用一个静态变量,因为我希望它被许多线程编辑(这些线程是从reduce函数调用的)。 问题是这个变量正在被当前reduce任务的线程以及其他reduce任务的线程编辑,我想避免这种情况 所以我的问题是:有没有一种方法或技巧可以用来只通过当前减速机的线程来修改这个变量 我希望我的问题足够清楚,能帮助你帮助我 非常感谢stack community:)您可能想要查看map/reduce程序的“无共享”方面。它们不打算(事实上也不能
非常感谢stack community:)您可能想要查看map/reduce程序的“无共享”方面。它们不打算(事实上也不能…)共享JVM对象——包括静态变量 减速器通常相互独立。它们在Mapper阶段处理过的数据的特定分区上进行操作 在异常情况下,仍然有机会使用计数器在减速器之间共享数据。但是,您更可能希望研究现有的map/reduce程序,并了解它们如何在reducer之间保持分离。谢谢javadba, 你说过减速器是独立的,是的,但是如果在同一个节点上有多个减速器,那么静态变量将被共享。 所以我使用的解决方案可能对其他人有所帮助,就是我根据唯一键的数量为每个减速器使用不同的变量。 例如,如果在我的第一个程序中,我声明了$publicstaticintx;$为了避免上面提到的问题,我声明$publicstaticarraylistx;$此ArrayList中的每个元素都专用于一个唯一的减速器