Apache spark 为什么洗牌溢出(内存)不仅仅是spark驱动程序/执行器内存
在阅读了一些在线论坛和堆栈溢出问题后,我了解到: 当执行器的内存不足时,就会发生数据溢出。 shuffle spill(memory)是溢出时内存中数据的反序列化形式的大小 我正在本地运行spark,并将spark驱动程序内存设置为Apache spark 为什么洗牌溢出(内存)不仅仅是spark驱动程序/执行器内存,apache-spark,pyspark,shuffle,Apache Spark,Pyspark,Shuffle,在阅读了一些在线论坛和堆栈溢出问题后,我了解到: 当执行器的内存不足时,就会发生数据溢出。 shuffle spill(memory)是溢出时内存中数据的反序列化形式的大小 我正在本地运行spark,并将spark驱动程序内存设置为10g 如果我的理解是正确的,那么如果groupBy操作需要的执行内存超过10GB它必须将数据溢出到磁盘 假设一个groupBy操作需要12GB内存,因为驱动程序内存设置为10GB它必须将几乎2GB的数据溢出到磁盘,所以洗牌溢出(磁盘)应该是2GB,洗牌溢出(内存)应
10g
如果我的理解是正确的,那么如果groupBy
操作需要的执行内存超过10GB
它必须将数据溢出到磁盘
假设一个groupBy
操作需要12GB
内存,因为驱动程序内存设置为10GB
它必须将几乎2GB
的数据溢出到磁盘,所以洗牌溢出(磁盘)应该是2GB,洗牌溢出(内存)应该是10GB的扩孔,因为洗牌溢出(内存)溢出时内存中数据的大小
如果我的理解正确,则洗牌溢出(内存)
我在windows任务管理器中观察到内存消耗,在作业运行时,它从未超过10.5GB,那么怎么可能洗牌溢出(内存)是26.7GB
这是因为度量是在整个任务中聚合的。所以,如果溢出发生三次,每次内存为10GB,则总数甚至可能达到30GB
Total Time Across All Tasks: 41 min
Locality Level Summary: Process local: 45
Input Size / Records: 1428.1 MB / 42783987
Shuffle Write: 3.8 GB / 23391365
Shuffle Spill (Memory): 26.7 GB
Shuffle Spill (Disk): 2.1 GB