此Spark App在3个节点上运行。我有一个包含HashMap的State对象(MessageState)。这个HashMap包含一个Graph(密钥叶,值父)(并且,不,GraphX不是这个的解决方案)让我们说State对象将变得很大以适应一个节点,因此它将分布在另一个节点上2个节点。如果我想知道叶子它是最上层的父(它会做一些递归函数来遍历整个地图)是否有可能让叶子在节点3和大多数上级父级位于节点1上,它将找不到它,或者火花分布将处理这一点,因此整个地图数据将可用于搜索。我的问题实际上是国家分配是如何运作的。
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));