我试图了解Spark Streaming输出的不同指标意味着什么,我稍微混淆了处理时间,总延迟和最后一批的加工延迟?
我看过Spark Streaming指南,其中提到了处理时间作为确定系统是否落后的关键指标,但其他地方如“ Pro Spark Streaming:The使用Apache Spark实时分析的禅“谈论使用总延迟和处理延迟。我没有找到任何列出Spark Streaming生成的所有指标的文档,并解释了每个指标的含义。
如果有人可以概述这三个指标的含义或者指出任何可以帮助我理解这些指标的资源,我将不胜感激。
答案 0 :(得分: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应用程序的实例:
我们看到了:
11 - 4 = 7
秒。7 + 1 = 8
。答案 1 :(得分:0)
答案 2 :(得分:0)
如果您的窗口是1分钟,平均处理时间是1分钟7秒,则您有一个问题:每批处理会将下一批处理延迟7秒。
您的处理时间图显示了稳定的处理时间,但始终高于批处理时间。
我认为在给定的时间后,您的驱动程序将在超出GC开销限制的情况下崩溃,因为它将充满等待执行的待处理批处理。
您可以通过减少处理时间来更改此设置,以使其不超过预期的微批处理最大持续时间(需要更改代码和/或资源分配),或者增加微批处理的大小,或者进行连续流式处理。
Rgds