Spark Streaming不会清除/ tmp

时间:2018-06-18 21:26:55

标签: scala apache-spark apache-spark-sql spark-streaming

我有一个Spark Streaming作业(2.3.1 - 独立群集):

  • ~50K RPS
  • 10个执行程序 - (2个核心,7.5Gb RAM,10Gb磁盘GCP节点)
  • 数据速率〜20Mb /秒,作业(运行时)1批次运行约0.5秒。

问题是,由于执行程序上的JVM永远不会终止,因此永远不会清除引发/tmp写入的临时文件。缺少一些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"

我已经尝试了CMSG1GC收藏家 - 除了调整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分钟的间隔进行清理。较大的驱动器可能会延长问题。

1 个答案:

答案 0 :(得分:0)

填充的驱动器变成了红色鲱鱼。 ds.cache之后,未从内存中释放作业内部的缓存DataSet。最终,事情溅到磁盘上,导致我们没有剩余的驱动器空间状况。或者,过早优化。删除对缓存的显式调用可以解决该问题,并且性能不受影响。