2016-08-24 9 views
1

この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)); 

答えて

0

"Return a JavaMapWithStateDStream by applying a function to every key-value element of this stream, while maintaining some state data for each unique key."

あなたはあまりにも多くを持っている場合PairRDDStreamにおける単一のキーのすべての値は、(同様に、単一のノードに同じノード上でそのキーの生活のための状態であるため、いくつかのノードで終わる可能性がありますが、Sparkは引き続き転送しなければならないデータの量を最小化しようとします)。 mapWithStateから別のキーの状態にアクセスすることはできません。「リーフがノード3にあり、最上位の親がノード1にあり、見つからないと考えられる可能性がありますか?」は適用されません。

+0

ここで、key = "firstKey"としましょう。このキー "firstKey"に対して、すべてのバッチで新しい値を受け取ります。このキーの場合にのみ、このキーのStateオブジェクトにあるHashMapに値が追加されます。ですから、ハッシュマップが成長し、ある時点でハッシュマップを含む状態オブジェクトが1つのノードに収まるように大きくなるので、私はスパークが他のノードにも配布されると推測します。葉がノード3にあり、最も上位の親がノード1にあり、それが「有効」でないと言う可能性がありますか? – Vlad

+0

値をマークアップインターフェイス(この例のような文字列ではない)にして、2つのオブジェクトにすることができます。データをマップに追加するタイプと、親をリーフから取得するタイプです。そういうわけで、私は国家の分布について尋ねてきました。親を検索するがリーフ(開始点)を検索するオブジェクトの型が他のノードにある場合の値はどうなるでしょうか。 – Vlad

+0

'RDD 'をお持ちの場合は、ノード間に 'SomeLargeObject'を分割するか、各ノードに1つ以上の完全な' SomeLargeObject'を持たせることを期待していますか? –

関連する問題