所以我要解决的问题如下:
- 我需要一个以特定频率发出消息的数据源
- 有 N 个神经网络需要单独处理每条消息
- 汇总所有神经网络的输出,并且仅当收集了每个消息的所有 N 个输出时,才应将消息声明为已完全处理
- 最后,我应该测量一条消息被完全处理所花费的时间(从它发出到收集该消息的所有 N 个神经网络输出之间的时间)
我很好奇如何使用火花流处理这样的任务。
我当前的实现使用了 3 种类型的组件:一个自定义接收器和两个实现 Function 的类,一个用于神经网络,一个用于最终聚合器。
概括地说,我的应用程序构建如下:
JavaReceiverInputDStream<...> rndLists = jssc.receiverStream(new JavaRandomReceiver(...));
Function<JavaRDD<...>, Void> aggregator = new JavaSyncBarrier(numberOfNets);
for(int i = 0; i < numberOfNets; i++){
rndLists.map(new NeuralNetMapper(neuralNetConfig)).foreachRDD(aggregator);
}
不过,我遇到的主要问题是它在本地模式下的运行速度比提交到 4 节点集群时要快。
我的实施一开始是错误的还是这里发生了其他事情?
这里还有一个完整的帖子http://apache-spark-user-list.1001560.n3.nabble.com/Developing-a-spark-streaming-application-td12893.html详细介绍了这三个中的每一个的实现前面提到的组件。