2017-04-10 11 views
0

私は特定のタプルからハッシュマップにキーと値を書き込み、他のものに格納されているキーを使用してハッシュマップから値を読み取ります。タスクの数が1に設定されているときはうまく動作しますが、この数値を増やすとすぐに、キーは無効になるときにヌル値を返すようになります。これは、各ボルトタスクがハッシュマップの独自のインスタンスを作成していて、データが共有されていないためです。どのようにしてすべてのボルトタスクが1つのハッシュマップを共有するのですか?私は現在、それほどのような方法を準備中にハッシュマップを作成してい複数のApacheストームボルトタスク間で同時にハッシュマップを共有

protected Map<String, JsonObject> hashMap; 

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

} 

私はまた、トポロジーレベルでのハッシュマップを定義し、変数として、私のボルトにそれを与えて試してみましたが、これは動作しませんでした。

答えて

0

タスクは、異なるワーカー(つまり異なるマシン)に配備できるため、タスク間でメモリ内のものを共有することはできません。

「仕事の独立した作業単位」としての仕事は、自分の入力だけに依存しなければなりません。

+0

Iveは静的ハッシュマップを使用して単一のワーカー上でハッシュマップを共有することができましたが、正しいですが、この機能を複数のワーカーに渡すことはできません。とにかく、特定のワーカーインスタンスにのみ送信されるようなタプルを "セット"することができますか? –

+0

あなたは '.fieldGrouping()'を使うことができます。 –

+0

私は何をやったのですか?脇では、嵐がどのように異なる労働者のフィールドグループを維持するために管理しているか知っていますか?それは労働者の間で常にタプルを渡していますか? –

関連する問題