我有一个Spark Streaming作业(2.3.1 - 独立群集):
问题是,由于执行程序上的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"
我已经尝试了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分钟的间隔进行清理。较大的驱动器可能会延长问题。
答案 0 :(得分:0)
填充的驱动器变成了红色鲱鱼。 ds.cache
之后,未从内存中释放作业内部的缓存DataSet。最终,事情溅到磁盘上,导致我们没有剩余的驱动器空间状况。或者,过早优化。删除对缓存的显式调用可以解决该问题,并且性能不受影响。