【发布时间】:2020-11-05 22:11:47
【问题描述】:
我有一个 Spark Streaming 作业(2.3.1 - 独立集群):
- ~50K RPS
- 10 个执行程序 -(2 个核心,7.5Gb RAM,10Gb 磁盘 GCP 节点)
- 数据速率约为 20Mb/秒,作业(运行时)以 1 秒的批次运行约 0.5 秒。
问题是触发写入/tmp 的临时文件永远不会被清除,因为执行器上的 JVM 永远不会终止。缺少一些 clever 批处理作业来清理 /tmp 目录我正在寻找正确的方法来防止我的作业因 no space left of device 错误而崩溃(并重新启动)。
我有以下SPARK_WORKER_OPTS 设置如下:
SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=1200 -Dspark.worker.cleanup.appDataTtl=345600"
我已经对 CMS 和 G1GC 收集器进行了试验 - 除了调节 GC 时间之外,似乎都没有受到影响。
我已经完成了大部分记录在案的设置,并进行了搜索,但未能找到任何其他尝试方向。我必须相信,ppl 正在运行更大的工作,并且运行时间长且稳定,这是一个已解决的问题。
其他配置位:
火花默认值:
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.broadcast.compress true
spark.streaming.stopGracefullyOnShutdown true
spark.ui.reverseProxy true
spark.cleaner.periodicGC.interval 20
...
spark-submit:(没什么特别的)
/opt/spark/bin/spark-submit \
--master spark://6.7.8.9:6066 \
--deploy-mode cluster \
--supervise \
/opt/application/switch.jar
就目前而言,该作业运行了大约 90 分钟,然后驱动器被填满,我们崩溃了。我可以用更大的驱动器来启动它们,但是 90 分钟应该允许我尝试每隔 20 分钟进行一次清理的配置选项。更大的驱动器可能只会延长问题。
【问题讨论】:
-
您能否尝试查找以下日志条目:
Worker cleanup enabled; old application directories will be deleted in、Removing directory和App dir cleanup failed?另请检查您的配置是否正确。 spark.worker.cleanup.interval 和 spark.worker.cleanup.appDataTtl 以秒为单位。对于超过 3 天的数据,您将每 20 分钟运行一次清理程序。还请检查您的配置是否正确应用于正在运行的管道。
标签: scala apache-spark apache-spark-sql spark-streaming