我正在使用10 r4.8xlarge,32个代码,244 GB内存和100GB SSD,我的输入是100个22GB txt文件。
下面是我的执行器参数
--num-executors 59 --executor-cores 5 --executor-memory 37g
我将executor-cores设置为5,因为似乎人们建议将默认值设置为5,而num-executors是floor(32/5) * 10 - 1
,executor-memory是(244 / floor(32/5)) (1 - 0.07)
,如本调优tutorial所建议>
使用上面的配置,我得到
org.apache.spark.memory.SparkOutOfMemoryError: error while calling spill() on
org.apache.spark.shuffle.sort.ShuffleExternalSorter@5eced6cb : No space left on device
与该代码相对应
return spark.sparkContext
.textFile(myInputDir)
.repartition(15800) // experimentally tested to be a good partition base on 1 file, 1 file the best repartition is 3000
由于每个任务都获得了37GB的内存,并且超过了22GB,因此我对如何达到火花SparkOutOfMemoryError
感到困惑,因为它只需读取并重新分区到其他节点即可。
有人可以给我指明方向吗?
答案 0 :(得分:0)
除非您使用某些内存层(例如apache ignite),否则改组总是涉及磁盘写操作
您的错误明确指出No space left on device
,请考虑增加磁盘容量。
答案 1 :(得分:0)
这可能是个问题.Spark将中间文件保留在/ tmp中,这可能会耗尽空间。您可以调整spark.local.dir或在提交时将此文件设置为具有更多空间的其他目录。在提交火花期间尝试添加相同的工作; --conf“ spark.local.dir = / directory / with / space”