火花流工作中的巨大延迟

时间:2018-03-04 14:24:24

标签: apache-spark tensorflow pyspark apache-kafka

我有一个近乎实时的火花流应用程序用于图像识别,其中接收器从kafka获取输入帧。我每个执行器有6个接收器,总共有5个执行器,我可以在Spark UI上看到每次迭代30个活动任务。

我的问题是能够从kafka读取850帧/秒,但是处理任务非常缓慢,这就是我面临背压相关问题的原因。在每个批次中,任务预期通过首先使用keras.model_loads加载它们来运行几个张量流模型,然后执行其他相关处理以从模型获得预测。第一张量流模型的输出是第二张量流模型的输入,第二张量流模型又加载另一个模型并在其上执行预测。现在最终输出#2是模型#3的输入,它做同样的事情,加载模型并执行预测。最终预测将发送回另一个主题kafka。对于每个任务都有这个流程,处理单个任务的总体延迟大约在10到15秒之间,这对于火花流应用来说是巨大的

任何人都可以帮助我,我怎样才能快速完成这个程序?

请记住,我必须在程序中使用这些自定义张量流模型来获得最终输出。

我心中有以下想法:

  • 选项1 - 使用结构化流媒体替换火花流

  • 选项2 - 中断顺序处理并将每个子流程放在单独的RDD中,即RDD1中的模型#1处理,RDD2中的模型#2处理等等

  • 选项3 - 仅在spark中重写自定义张量流功能,目前这是我在每个任务中使用的单个python程序。但是我对这个选项还不太确定,到目前为止还没有检查可行性。但我假设如果我能够做到这一点,我将完全控制模型的分布。因此,可以在AWS集群上的GPU机器上快速处理这些任务,这是当前没有发生的。

1 个答案:

答案 0 :(得分:0)

调整火花作业是最耗时的部分,您可以尝试以下选项 -