【发布时间】:2012-10-24 22:01:55
【问题描述】:
现在我想创建一个全局双变量(成员),它可以被 MapReduce 作业中的每个映射器/减速器访问和更改。起初我试图在我的主 java 文件中声明一个静态双精度成员,但这似乎有问题,因为每个映射器/减速器都在单独的 JVM 上运行,并且可以正确更改和访问该成员。
我知道对于 int 变量有counter 机制。但是如果我想创建一个全局双变量,我该怎么做呢?
我的最终目标是总结所有映射器/缩减器中的双重格式。如果我不能或不应该创建全局变量,有没有其他方法可以实现该目标?
【问题讨论】:
-
全局可变变量基本上与您可以使用 map/reduce 执行的操作相反。甚至不要尝试这样做。即使您可以模仿它,这也会破坏 map/reduce 的全部目的并阻止并行化生效。
-
@LouisWasserman 但是如果我想总结一些在映射器或减速器中是双倍的东西怎么办?
-
@LouisWasserman 我已将其添加到问题中。
-
如果你想对双精度值求和,让你的映射器返回他们收到的值的总和,并让减速器总结他们的输入。您必须将自己限制为局部变量,但您可以以这种方式进行求和等操作。