Apache Spark 2.2.0 blockmanager内存计算

时间:2018-03-28 10:21:02

标签: apache-spark

如果我在纱线模式下启动带有执行程序内存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从哪个属性获取maxOnHeapMemSizemaxOffHeapMemSize值? 2.为什么驱动程序和执行程序显示的值之间存在差异,即使它们都已使用相同的内存启动了?

1 个答案:

答案 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