31、spark-on-kubernetes中任务报错No space left on device
前提:我的spark版本为2.4.5, spark-operator版本为:v1beta2-1.0.0-2.4.5
spark任务在shuffle过程中会将一些中间数据放入当前executor的磁盘下。而我们的任务运行在华为云的CCI服务上(一个k8s serverless集群服务)。
这个场景下,spark.local.dir的默认目录(/var/data/spark-{UUID})是以emptydir挂载卷的方式挂载的,大小默认40g。而且当前这个operator版本还调整不了这个大小。对应一些作业来说,这个大小不够,任务就会抛出磁盘容器不足异常。
最终的解决办法,在spark.local.dir参数里配置多个目录,eg:spark.local.dir: ‘/data1,/data2,/data3’。这样它每个目录都会挂载一个emptydir卷,每个40g大小。不过遇到数据倾斜会导致某个目录磁盘还是不够。但是现在暂时这样了,数据倾斜情况下再处理数据倾斜吧。
也在考虑使用开源的RSS(remote shuffle service)服务,是否符合当前情况,投入和收益是否合理