为什么spark执行器可以有一个无序读超过内存分配?

4ioopgfo  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(344)

我为spark应用程序设置了以下参数:

--conf spark.executor.instances=20 
--conf spark.driver.memory=4G 
--conf spark.executor.memory=14G 
--conf spark.executor.cores=8

在我的工作中有一个shuffle阶段,当我检查spark ui时,我发现几个执行器读取了超过20g的shuffle数据(shuffle read size),并且没有内存不足的异常。
有人能解释为什么执行器可以读取比分配的内存量(14g)更多的数据吗?

vulvrdjw

vulvrdjw1#

热释光;dr:shuffle将中间结果存储在磁盘上。
大多数spark操作都是以流方式运行的。让我们编写一个简单的程序来读取1t文本文件并计算行数:

sc.textFile("BIG_FILE.txt").count()

如果需要的话,我可以在一台小型计算机上运行这个程序(虽然需要很长时间),因为一次只需要在内存中运行一行。shuffle的操作方式大致相同,它将来自其他节点的传入数据写入磁盘,然后通过流传输。

相关问题