上一篇:二、Spark算子调优最佳实践
1、内存的具体配置及原因
YARN Container里面实际的内存结构,即yarn-cluster模式下Executor内存使用的实现方式,如下图:
yarn.nodemanager.resource.memory-mb控制在每个节点上Container能够使用的最大内存。可以使用spark.executor.memory来配置每个Executor使用的内存总量。比如:
--executor-memory 8G
Executor可使用的内存中,主要分为以下三块:
- 第一块让task执行用户编写的代码使用,默认占executor总内存的20%
- 第二块让task通过shuffle过程拉取上一个stage的task的输出后,进行聚合等操作使用,默认也是占executor内存总大小的20%,用spark.shuffle.memoryFraction可配置比例。
- 第三块是让RDD cache使用,默认占executor总内存大小的60%,用spark.storage.memoryFra