Spark Streaming处理时间与总延迟与处理延迟

问题描述 投票:4回答:3

我试图了解Spark Streaming输出的不同指标意味着什么,我稍微混淆了最后一批处理时间,总延迟和处理延迟之间的差异?

我已经看过Spark Streaming指南,它提到处理时间是一个关键指标,用于确定系统是否落后,但其他地方,如“Pro Spark Streaming:使用Apache Spark的实时分析的禅”谈论使用总延迟和处理延迟。我没有找到任何列出Spark Streaming生成的所有指标的文档,并解释了每个指标的含义。

如果有人可以概述这三个指标的含义或者指出任何可以帮助我理解这些指标的资源,我将不胜感激。

apache-spark streaming analytics spark-streaming metrics
3个回答
10
投票

让我们分解每个指标。为此,我们定义一个基本流应用程序,它从一些任意来源以给定的4秒间隔读取批处理,并计算经典字数:

inputDStream.flatMap(line => line.split(" "))
            .map(word => (word, 1))
            .reduceByKey(_ + _)
            .saveAsTextFile("hdfs://...")
  • 处理时间:端到端计算所有作业的给定批次所需的时间。在我们的例子中,这意味着一个单独的工作,从flatMap开始,到saveAsTextFile结束,并假定作业已被提交的先决条件。
  • 调度延迟:Spark Streaming调度程序提交批处理作业所用的时间。这是如何计算的?正如我们所说,我们的批次每4秒从源头读取一次。现在让我们假设一个给定的批处理花了8秒钟来计算。这意味着我们现在8 - 4 = 4秒落后,从而使调度延迟4秒。
  • 总延迟:这是Scheduling Delay + Processing Time。按照相同的例子,如果我们落后4秒,意味着我们的调度延迟是4秒,而下一批又花了8秒来计算,这意味着总延迟现在是8 + 4 = 12秒长。

来自正在使用的Streaming应用程序的实例:

Streaming application

我们看到:

  • 最底层的工作需要11秒才能完成。所以现在下一批次的调度延迟是11 - 4 = 7秒。
  • 如果我们从底部看第二行,我们会看到调度延迟+处理时间=总延迟,在这种情况下(舍入0.9到1)7 + 1 = 8

0
投票

我们正在经历稳定的处理时间,但会增加调度延迟。

根据答案,调度延迟应仅受先前运行的处理时间的影响。

Spark只运行流媒体,没有别的。

时间窗口为1分钟,处理120K记录。

enter image description here


0
投票

如果您的窗口是1分钟,平均处理时间是1分7秒,则会出现问题:每个批次将延迟下一个7秒钟。

您的处理时间图表显示稳定的处理时间,但始终高于批处理时间。

我想在经过一段时间之后,你的驱动程序会因超出GC开销限制而崩溃,因为它将满载等待批准的挂起批处理。

您可以通过减少处理时间以使其低于预期的微量接头最大持续时间(需要代码和/或资源分配更改),或增加微量接收器大小,或转到连续流式传输来更改此值。

RGDS

© www.soinside.com 2019 - 2024. All rights reserved.