【问题标题】:Spark Streaming Kafka createDirectStream - Spark UI shows input event size as zeroSpark Streaming Kafka createDirectStream - Spark UI 将输入事件大小显示为零
【发布时间】:2016-09-01 09:26:50
【问题描述】:

我已经使用 createDirectStream 实现了 Spark Streaming。我的 Kafka 生产者每秒向具有两​​个分区的主题发送几条消息。

在 Spark 流式传输方面,我每秒读取一次 kafka 消息,并且我以 5 秒的窗口大小和频率对它们进行窗口化。

Kafka 消息得到正确处理,我看到了正确的计算和打印。

但在 Spark Web UI 中,在 Streaming 部分下,每个窗口的事件数显示为零。请看这张图片:

我很困惑为什么它显示为零,它不应该显示正在馈入 Spark Stream 的 Kafka 消息的数量吗?

更新:

这个问题似乎在我使用 groupByKeyAndWindow() api 时发生。当我从我的代码中注释掉这个 api 用法时,Spark Streaming UI 开始正确报告 Kafka 事件输入大小。

知道为什么会这样吗?这可能是 Spark Streaming 的缺陷吗?

我正在使用 Cloudera CDH:5.5.1,Spark:1.5.0,Kafka:KAFKA-0.8.2.0-1.kafka1.4.0.p0.56

【问题讨论】:

  • 您是否正在从检查点目录恢复作业?这里似乎注册了一个问题issues.apache.org/jira/browse/SPARK-11152
  • 您确定您正在寻找正确的流媒体作业吗?
  • @avr,为了验证我的代码中没有检查点,我注释掉了 updateStateByKey api 和 ssc.checkpoint(checkpointDir) 的使用。但我仍然看不到正确的“事件大小”。 Spark Streaming UI 正确报告了第一个事件大小,并且总是显示“零”。
  • 您找到解决此问题的方法了吗?无论直接还是基于接收器的 kafka 输入流,都有类似的问题。
  • 我在使用自定义接收器时遇到了类似的问题,除了我所有的输入大小都是 1。我正在使用带有 slideDuration 和 windowDuration 的窗口函数。

标签: apache-spark apache-kafka spark-streaming spark-streaming-kafka


【解决方案1】:

Spark Kafka库代码好像没有记录。

基于Spark 2.3.1的代码

  1. 搜索Input Size / Records,发现是stageData.inputBytes的值(StagePage.scala)
  2. 搜索StageDatainputBytes,发现是metrics.inputMetrics.bytesRead(LiveEntity.scala)的值
  3. 搜索bytesRead,发现设置在HadoopRDD.scalaFileScanRDD.scalaShuffleSuite.scala。但不在任何与 Kafka 相关的文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2019-08-08
    • 2022-10-18
    • 1970-01-01
    • 2016-03-12
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多