实际上,应用程序运行得稳定与否,取决于硬件资源供给与计算需要是否匹配。这就好比是赛车组装,要得到一辆高性能的车子,我们并不需要每一个部件都达到“顶配”的要求,而是要让组装配件之间相互契合、匹配,才能让车子达到预期的马力输出。
因此,不妨从硬件资源的角度切入,去探索开发者必须要关注的配置项都有哪些。
内存
说起内存,不妨先来回顾一下 Spark 的内存划分。对于给定的 Executor Memory,Spark 将 JVM Heap 划分为 4 个区域,分别是 Reserved Memory、User Memory、Execution Memory 和 Storage Memory。
结合图解,其中 Reserved Memory 大小固定为 300MB,其他 3 个区域的空间大小,则有 3 个配置项来划定,它们分别是 spark.executor.memory、spark.memory.fraction、spark.memory.storageFraction。
为了后续叙述方便,分别把它们简称为 M、mf 和 s