twitter风暴,为什么螺栓没有收到喷口发出的信息

fwzugrvs  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(482)

我在一个项目中使用twitter风暴,我有一个奇怪的问题。我有一个喷口,下一个代码是:

public void nextTuple()
{
    HashMap cluster = this.databaseManager.getCluster();
    System.out.println("emitted: " + cluster);
    this.collector.emit(new Values(cluster));
}

以及连接到该喷口的螺栓,其具有以下结构:

public void execute(Tuple tuple)
{
    HashMap<String, List<String>> unigrams = (HashMap)tuple.getValueByField("unigrams");
    System.out.println("received: " + unigrams);
}

发射的东西应该和接收的东西一样对吗?首先,输出显示:

emitted: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}

(这与数据的含义无关,关键是数据的发射和接收)。但是,当发射信号改变时,接收信号是相同的:

emitted: {13788873=[aa2ec732b5b64b25be81abe79d2176bb], 2293158=[aa2ec732b5b64b25be81abe79d2176bb], 218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}

我在追问为什么在第二种情况下它不起作用。此外,从nexttuple打印的输出比从execute打印的要多得多。
你知道为什么吗?

wvyml7n5

wvyml7n51#

我找到的唯一解决方案是在发送之前将hashmap转换为字符串,然后在bolt中将其转换回hashmap。

相关问题