此Spark应用程序在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));
“通过将函数应用于此流的每个键值元素,同时为每个唯一键维护一些状态数据,来返回JavaMapWithStateDStream 。”
由于a中单个键的所有值PairRDDStream
都在单个节点上,因此该键的状态也位于同一节点上(如果值太多,它们可能会出现在多个节点上,但是Spark仍将尝试最小化它必须传输的数据量)。您无法访问来自的其他键的状态mapWithState
,因此“是否有可能说叶子在节点3上,而最高父节点在节点1上却找不到它”不适用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句