【问题标题】:use of Static variable in mapreduce programs在 mapreduce 程序中使用静态变量
【发布时间】:2014-06-11 14:09:03
【问题描述】:

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

所以我的问题是:有没有办法或技巧仅通过当前 reducer 的线程来修改这个变量?

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

非常感谢堆栈社区:)

【问题讨论】:

    标签: java multithreading hadoop static mapreduce


    【解决方案1】:

    您可能想要查看 map/reduce 程序的“无共享”方面。它们不打算(实际上也不能......)共享 JVM 对象 - 包括静态变量。

    reducer 通常大部分是相互独立的。它们对已在 Mapper 阶段处理的数据的特定分区进行操作。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 2015-03-02
        • 2013-05-18
        • 2017-05-13
        • 2011-01-29
        • 2011-12-05
        • 1970-01-01
        相关资源
        最近更新 更多