当我们在纱线上提交spark应用程序时,我们可以指定以下两个与执行程序内存相关的配置:
spark.executor.memory
spark.yarn.executor.memoryOverhead
spark.executor.memory
用于堆内存,spark.yarn.executor.memoryOverhead
用于堆内存。
但是,当我们从纱线请求容器时,我们只是询问spark.executor.memory + spark.yarn.executor.memoryOverhead
内存,我们没有告诉纱线堆上有多少内存,堆外有多少内存,那么纱线容器怎么知道多少应该在堆上分配内存,而应该在堆外分配多少内存?