首页 > 解决方案 > Spark Streaming 接收器只处理一条记录

问题描述

我在 Spark Streaming 2.2.1 作业中有 16 个接收器。一段时间后,一些接收器处理的记录越来越少,最终每秒只处理一条记录。可以在屏幕截图中观察到该行为:

在此处输入图像描述

虽然我知道根本原因很难找到并且不明显,但有没有办法可以进一步调试这个问题?目前我不知道从哪里开始挖掘。会不会和背压有关?

Spark流媒体属性:

spark.app.id    application_1599135282140_1222
spark.cores.max 64
spark.driver.cores  4
spark.driver.extraJavaOptions -XX:+PrintFlagsFinal -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dump/ -Dlog4j.configuration=file:///tmp/4f892127ad794245aef295c97ccbc5c9/driver_log4j.properties
spark.driver.maxResultSize  3840m
spark.driver.memory 4g
spark.driver.port   36201
spark.dynamicAllocation.enabled false
spark.dynamicAllocation.maxExecutors    10000
spark.dynamicAllocation.minExecutors    1
spark.eventLog.enabled  false
spark.executor.cores    4
spark.executor.extraJavaOptions -XX:+PrintFlagsFinal -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dump/
spark.executor.id   driver
spark.executor.instances    16
spark.executor.memory   4g
spark.jars  file:/tmp/4f892127ad794245aef295c97ccbc5c9/main-e41d1cc.jar
spark.master    yarn
spark.rpc.message.maxSize   512
spark.scheduler.maxRegisteredResourcesWaitingTime   300s
spark.scheduler.minRegisteredResourcesRatio 1.0
spark.scheduler.mode    FAIR
spark.shuffle.service.enabled   true
spark.sql.cbo.enabled   true
spark.streaming.backpressure.enabled    true
spark.streaming.backpressure.initialRate    25
spark.streaming.backpressure.pid.minRate    1
spark.streaming.concurrentJobs  1
spark.streaming.receiver.maxRate    100
spark.submit.deployMode client

标签: apache-sparkspark-streaminghadoop-yarngoogle-cloud-dataproc

解决方案


似乎问题在运行 30 分钟后开始显现。我认为背压可能是一个原因。根据这篇文章

激活背压后,驱动程序监控当前的批处理调度延迟和处理时间,并动态调整接收器的最大速率。可以在接收器日志中验证新速率限制的通信:

2016-12-06 08:27:02,572 INFO org.apache.spark.streaming.receiver.ReceiverSupervisorImpl 收到新的速率限制:51。

以下是我建议您尝试的方法:

  1. 检查接收器日志以查看是否触发了 backpress。
  2. 检查您的流接收器以查看是否有任何错误。
  3. 检查 YARN 资源管理器的资源利用率。
  4. 调整 Spark 参数,看看是否有影响。

推荐阅读