我有以下的Spark作业,尝试将所有内容保留在内存中:
val myOutRDD = myInRDD.flatMap { fp =>
val tuple2List: ListBuffer[(String, myClass)] = ListBuffer()
:
tuple2List
}.persist(StorageLevel.MEMORY_ONLY).reduceByKey { (p1, p2) =>
myMergeFunction(p1,p2)
}.persist(StorageLevel.MEMORY_ONLY)
然而,当我查看作业跟踪器时,我仍然有很多Shuffle Write和Shuffle溢写到磁盘...
Total task time across all tasks: 49.1 h
Input Size / Records: 21.6 GB / 102123058
Shuffle write: 532.9 GB / 182440290
Shuffle spill (memory): 370.7 GB
Shuffle spill (disk): 15.4 GB
然后任务失败了,因为 "no space left on device" ... 我想知道这里的 532.9 GB Shuffle write 是写入磁盘还是内存?
同时,为什么还有 15.4 G 的数据溢出到了磁盘上,而我明确要求将它们保留在内存中?
谢谢!