首页 > 解决方案 > 如何计算 Spark 结构化流作业的输入和处理速率?

问题描述

我正在尝试使用每秒发出 100 行的简单“速率”源来了解 spark 3.1.1 中结构化流作业的输入速率和处理速率的确切含义。用户界面报告:

结构化流式用户界面

在 4 个指标中,有 3 个是有意义的:

  1. 输入记录保持在 100 处,这是正确的

  2. 批处理持续时间约为 300 毫秒

  3. 处理速率显示大约 330 条奇数记录/秒,这似乎还可以(输入记录/批处理持续时间)。

  4. 输入速率显示大约 6666 条记录/秒,我无法理解。没有指定触发间隔。代码片段:

    火花 = SparkSession
    .builder
    .getOrCreate()

    lines=spark
    .readStream
    .format("rate")
    .option("rowsPerSecond", 100) .load
    ()

    outputStream = 行
    .writeStream
    .format("console")
    .outputMode("append")
    .queryName("RateQuery")

    query=outputStream.start() query.awaitTermination()

我对这个过程的理解是:

  1. 接收到 100 行(或多或少是瞬时的)并且有一个暂停
  2. 100 行形成并启动一个微批次
  3. 完成/写入控制台大约需要 330 毫秒
  4. 返回并等待大约 670 ms 以等待下一次输入数据突发。

读到输入速率= numInputRows(或批量大小)/以秒为单位的触发间隔

这如何计算到 6666 条记录/秒?编辑:感谢 mike 从这里的回复,现在很明显,输入速率反映了 spark 接收输入的速度(它能够在 15 毫秒内读取 100 行,速率为 6000 多条记录/秒)。

标签: streamingmetricsspark-structured-streamingperformancecounter

解决方案


推荐阅读