Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 开发spark流应用程序_Apache Spark_Spark Streaming - Fatal编程技术网

Apache spark 开发spark流应用程序

Apache spark 开发spark流应用程序,apache-spark,spark-streaming,Apache Spark,Spark Streaming,因此,我试图解决的问题如下: 我需要一个以特定频率发送消息的数据源 有N个神经网络需要单独处理每条消息 来自所有神经网络的输出被聚合,并且只有当每个消息的所有N个输出被收集时,才应该声明消息被完全处理 最后,我应该测量一条消息被完全处理所需的时间(从消息发出到该消息的所有N个神经网络输出被收集之间的时间) 我很好奇如何使用spark streaming来完成这样的任务 我当前的实现使用了3种类型的组件:一个自定义接收器和两个实现函数的类,一个用于神经网络,一个用于最终聚合器 概括地说,我的应

因此,我试图解决的问题如下:

  • 我需要一个以特定频率发送消息的数据源
  • 有N个神经网络需要单独处理每条消息
  • 来自所有神经网络的输出被聚合,并且只有当每个消息的所有N个输出被收集时,才应该声明消息被完全处理
  • 最后,我应该测量一条消息被完全处理所需的时间(从消息发出到该消息的所有N个神经网络输出被收集之间的时间)
我很好奇如何使用spark streaming来完成这样的任务

我当前的实现使用了3种类型的组件:一个自定义接收器和两个实现函数的类,一个用于神经网络,一个用于最终聚合器

概括地说,我的应用程序构建如下:

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);
}
JavaReceiverInputDStream rndLists=jssc.receiverStream(新的JavaRandomReceiver(…);
函数聚合器=新的JavaSyncBarrier(numberOfNets);
for(int i=0;i
不过,我遇到的主要问题是,它在本地模式下的运行速度比提交到4节点集群时快

我的实现一开始是错误的,还是这里发生了其他事情


这里还有一篇完整的文章,详细介绍了前面提到的三个组件中的每一个组件的实现。

似乎有很多对象的重复实例化和序列化。后者可能会影响集群中的性能

你应该试着只实例化一次你的神经网络。您必须确保它们是可序列化的。您应该使用
flatMap
而不是多个
map
s+
union
。大致如下:

//首先初始化神经网络
List neuralNetMappers=新阵列列表(numberOfNets);
for(int i=0;i
如果您能够以这种方式初始化网络,则可以节省大量时间。此外,链接帖子中包含的
union
内容似乎没有必要,而且会影响你的表现:一个
flatMap
就可以了


最后,为了进一步优化集群中的性能,.

感谢您的回复,我确实在单个节点上使用了该解决方案,它确实加快了速度。不过,我已经尝试在多节点集群上运行此功能,但性能似乎没有任何提高。因此,我的问题是,我将如何以一种受益于多节点集群的方式来写这篇文章?关于spark如何分配工作负载的一些一般知识也会有所帮助,因为我在这方面没有找到很多细节。首先,您应该确定哪些阶段需要更长的时间。您可以在中使用monitorization webapp,根据阶段的占用量对阶段进行排序。比较单个节点和集群中运行的此输出。另外,使用Spark 1.1.0也会使您受益匪浅,因为它具有更好的流式处理调试功能。在该web界面中,您还应该查看“流”选项卡,其中您将看到每秒处理多少事件。您可能应该使用它来衡量性能。您的集群是如何连接的?节点之间的连接不良将对性能产生严重的负面影响。再次感谢您的快速回复,连接不应该是一个问题,这是4台独立的机器连接在同一个LAN上,我还对spark之前的storm有过一些经验,它具有更直观的工作分配模式,这就是我在spark上遇到的问题,我无法理解它是如何并行应用的。