在多个Apache Storm Bolt任务之间共享并发Hashmap

时间:2017-04-10 14:19:31

标签: java concurrency apache-storm

我有一个风暴螺栓,它将键和值写入某些元组的散列映射,并使用存储在其他元组中的键从散列映射中读取值。当任务数量设置为1时,它可以正常工作,但只要我增加此数字,键就会在它们不应该时返回空值。我假设这是因为每个bolt任务都在创建自己的hashmap实例,因此数据不是共享的。如何让所有bolt任务共享一个Hashmap?

我目前正在prepare方法中创建hashmap,如下所示:

protected Map<String, JsonObject> hashMap;

@Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector)
{
    _collector = collector;
    hashMap = Collections.synchronizedMap(new ConcurrentHashMap<String, JsonObject>());

}

我也尝试在拓扑级别定义hashmap并将其作为变量提供给我的bolt但是这不起作用。

1 个答案:

答案 0 :(得分:0)

任务可以部署到不同的工作人员(即不同的机器),因此,您无法在任务之间共享任何内存。

任务和#34;独立工作单位&#34;必须完全取决于他们的意见。