hadoop中所有节点的公共变量

7z5jn7bk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(308)

我想在hadoop map reduce程序中为我的所有map函数保留一个公共全局变量。这个变量在所有map函数中都是i校正的,如何同步执行?

lmvvr0a8

lmvvr0a81#

正如cowsaysmoo所说,hadoop是不共享的。可以使用诸如hbase之类的数据库来获取同步计数器。有关详细信息,请参见增量。我不知道这是否是一个过度杀伤力,但这是hbase的用途之一。

k5ifujac

k5ifujac2#

用户定义的计数器是全局的:map reduce框架跨所有Map聚合它们,并在作业结束时进行缩减以生成一个总计。
在驱动程序中创建计数器

public class Driver{
    enum Count {
        TOTAL
    } 
}

在Map器中添加下面的行

context.getCounter(Count.TOTAL).increment(1);

然后在作业后使用下面的代码读取计数器值。submit()

Counters counters = job.getCounters();
long missing = counters.findCounter(
Driver.Count.MISSING).getValue();

通过使用计数器,您可以跟踪全局计数器。我的理解是,这应该符合你的目的。

mwkjh3gx

mwkjh3gx3#

hadoop是一个“无共享”的架构,虽然有办法在Map器或还原器之间共享一些数据,但没有办法保证同步。也就是说,如果您想尝试,可以使用作业计数器来检查值。或者,您可以尝试更改密钥类型并将还原数设置为1。然后您可以保证所有的数据都被一个系统看到,并且可以在那里应用您的计数器。然而,这取决于你的数据有多大。

相关问题