我有16个接收器在Spark流2.2.1工作。一段时间后,一些接收器处理的记录越来越少,最终每秒只处理一个记录。在屏幕截图上可以观察到这种行为:
虽然我知道根本原因很难找到,也不明显,但有没有办法进一步调试这个问题?目前我不知道从哪里开始挖掘。可能和背压有关吗?
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
1条答案
按热度按时间uajslkp61#
似乎问题在运行30分钟后开始显现。我认为背压可能是一个原因。根据这篇文章:
利用激活的背压,驱动程序监控当前的批调度延迟和处理时间,并动态调整接收器的最大速率。可以在接收器日志中验证新速率限制的通信:
2016-12-06 08:27:02572 info org.apache.spark.streaming.receiver.receiversupervisorimpl收到新的速率限制:51。
以下是我建议您尝试的方法:
检查接收器日志以查看是否触发了反压。
检查您的流接收器,看看是否有任何错误。
检查Yarn资源管理器的资源利用率。
调整spark参数,看看这是否有影响。