现在我想创建一个全局双变量(成员),可以由MapReduce作业中的每个映射器/缩减器访问和更改。起初我试图在我的主java文件中声明一个静态double成员,但它似乎有问题,因为每个mapper / reducer在一个单独的JVM上运行,并且可以正确地更改和访问该成员。
我知道对于int变量,有counter
机制。但是如果我想创建一个全局双变量,我该怎么做呢?
我的最终目标是总结所有地图制作工具/缩减器中的双重格式。如果我不能或不应该创建全局变量,还有其他方法可以实现这一目标吗?
答案 0 :(得分:2)
这些双打来自哪里?如果它们在输入数据中,则可以将其作为普通MR作业。让您的映射器始终输出相同的键,以及要求的值。使用组合器在每个映射器中进行本地求和。然后只使用一个减速器,让它简单地发出总和。
“全局”状态正是Map-Reduce范例试图避免的。您必须尝试将所有内容都考虑为在单独的映射器中执行不同的工作部分,然后在reducers中进行组合/聚合。
答案 1 :(得分:1)
实际上你可以像整数一样对待。您可以将任何双倍乘以100000并将其存储在计数器中。在减速机中如果需要,只需除以100000.