我正在做一些基准测试,而且我也关注Spark中的内存问题。在运行我的Spark应用程序时,我看到Spark驱动程序进程的内存不同,具体取决于我运行应用程序的部署模式。
下表显示了我的Spark UI在执行程序中显示的不同值 - >应用程序的驱动程序部分。我按照spark-submit参数设置驱动程序内存--driver-memory。
--driver-memory parameter | yarn-client | yarn-cluster
==================================================================
1g | 511.1 MB | 511.9 MB
2g | 1247.3 MB | 1140.4 MB
5g | 3.4 GB | 3.1 GB
10g | 7.0 GB | 6.4 GB
20g | 14.2 GB | 13.1 GB
我在互联网上找到了一个计算(https://0x0fff.com/spark-memory-management/),说,
driverMemory = (driver.memory * scalaOverhead - SystemReserved) * memoryFraction
= (driver.memory * ~0.96 - 300) * 0.75
估计实际用于驱动程序进程的内存(没有用户内存的Spark内存)。
这个计算非常适合我的纱线客户端模式!但是,正如您在表中看到的那样,两种模式之间的值不同,当我增加--driver-memory值时,差距会增大。
我在这里错过了什么吗?