如果我在纱线模式下启动带有执行程序内存1G和驱动程序内存1G的spark-submit。 我在Spark日志中看到以下内容:
INFO org.apache.spark.storage.BlockManagerMasterEndpoint:使用366.3 MB RAM,BlockManagerId(驱动程序,10.10.11.116,36011,无)注册块管理器10.10.11.116:36011 INFO org.apache.spark.storage.BlockManagerMasterEndpoint:注册块管理器vm-souvik-1.novalocal:36075 414.4 MB RAM,BlockManagerId(1,vm-souvik-1.novalocal,36075,无)
我搜索过并发现https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/storage/BlockManagerMasterEndpoint.scala中的以下行显示以下信息
logInfo("Registering block manager %s with %s RAM, %s".format(
id.hostPort, Utils.bytesToString(maxOnHeapMemSize + maxOffHeapMemSize), id))
我的问题是
1. Spark从哪个属性获取maxOnHeapMemSize
和maxOffHeapMemSize
值?
2.为什么驱动程序和执行程序显示的值之间存在差异,即使它们都已使用相同的内存启动了?
答案 0 :(得分:0)
查看spark docs的“内存管理”部分,特别是在确定分配Block Manager的堆内存量时,如何将属性multilist = [[0,3,-1,9],[4,2,77,55],[22,-11]]
for i in multilist:
print(sorted(i))
singlelist = [0,-44,21]
print(sorted(singlelist))
应用于内存配置。要回答您的问题,这些值是根据您为Executor / Driver设置的内容派生的。
属性spark.memory.fraction
只有在启用时才会被考虑。
如果提高日志级别,您可以从日志中获取更多详细信息。
spark.memory.offHeap.size