このSparkアプリケーションは3つのノードで動作しています。私は、HashMapを含むStateオブジェクト(MessageState)を持っています。このHashMapにはグラフ(キーリーフ、値の親)が含まれています(そうでない場合、GraphXはこれに対する解決策ではありません)。ステートオブジェクトが1つのノードに収まるように大きくなり、他の2ノードに分散されます。私がリーフを知りたい場合は、リーフがノード3にあり、最も上位の親がノード1にあるとします。それが見つからないか、スパーク分布がそれを処理して、地図データ全体を検索できるようにします。私の質問は、実際には州の流通がどのように機能しているかということです。Stateオブジェクト内のマップはすべてのノードで同じですか?
JavaPairDStream<String, String> inputMessagesStream = readFromKafkaStream1();
Function3<String, Optional<String>, State<MessageState>, String> messageState = (key, value, state) -> {
//MessageState contains the HashMap
if (state.exists()) {
return state.get().process(value.get());
} else {
MessageState ms = new MessageState();
ms.process(value.get());
state.update(ms);
return null;
}
};
JavaMapWithStateDStream<String, String, MessageState, String> message1 = inputMessagesStream.mapWithState(StateSpec.function(messageState));
ここで、key = "firstKey"としましょう。このキー "firstKey"に対して、すべてのバッチで新しい値を受け取ります。このキーの場合にのみ、このキーのStateオブジェクトにあるHashMapに値が追加されます。ですから、ハッシュマップが成長し、ある時点でハッシュマップを含む状態オブジェクトが1つのノードに収まるように大きくなるので、私はスパークが他のノードにも配布されると推測します。葉がノード3にあり、最も上位の親がノード1にあり、それが「有効」でないと言う可能性がありますか? – Vlad
値をマークアップインターフェイス(この例のような文字列ではない)にして、2つのオブジェクトにすることができます。データをマップに追加するタイプと、親をリーフから取得するタイプです。そういうわけで、私は国家の分布について尋ねてきました。親を検索するがリーフ(開始点)を検索するオブジェクトの型が他のノードにある場合の値はどうなるでしょうか。 – Vlad
'RDD'をお持ちの場合は、ノード間に 'SomeLargeObject'を分割するか、各ノードに1つ以上の完全な' SomeLargeObject'を持たせることを期待していますか? –