1.executor 和 container
01.Spark中的 executor 进程是跑在 container 中,所以container的最大内存会直接影响到executor的最大可用内存
02. yarn.nodemanager.pmem-check-enabled 该参数默认是true,也就是会由它来控制监控container的内存使用
03. yarn.scheduler.maximum-allocation-mb 设置值6114,也就是说单个container申请的最大内存是这么多,
执行任务的时候你的executer需要的内存超出这个值,那么就会被杀掉
container超过了内存的限制从而被kill掉
04.executor执行的时候,用的内存可能会超过 executor-memory
所以会为executor额外预留一部分内存。spark.yarn.executor.memoryOverhead 代表了这部分内存
即实际的内存
val executorMem = args.executorMemory + executorMemoryOverhead
05.memoryOverhead
如果没有设置 spark.yarn.executor.memoryOverhead ,则这部分的内存大小为
math.max((MEMORY_OVERHEAD_FACTOR * executorMemory).toInt, MEMORY_OVERHEAD_MIN))
其中 MEMORY_OVERHEAD_FACTOR 默认为0.1, MEMORY_OVERHEAD_MIN 默认为384m executorMemory 为设置的 executor-memory
实际 executorMem= X+max(X*0.1,384)