在SO上多次提出了与Spark内存开销相关的问题,我浏览了大部分。然而,在阅读了多篇博客后,我感到困惑。
以下是我的问题:
- 内存开销是否属于执行器内存的一部分,还是独立的?因为有些博客说内存开销属于执行器内存的一部分,而其他人则说执行器内存+内存开销(这是否意味着内存开销不属于执行器内存)?
- 内存开销和堆外内存是否相同?
- 如果我没有将开销作为spark-submit的一部分进行说明,它会采用默认值18.75吗?还是不会?
- 如果我们给予比默认值更多的内存开销,是否会产生任何副作用?
https://docs.qubole.com/en/latest/user-guide/engines/spark/defaults-executors.html https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html
以下是我想要理解的情况。 我有5个节点,每个节点有16个vcore和128GB内存(其中120GB可用),现在我想提交Spark应用程序,下面是我考虑的配置。
Total Cores 16 * 5 = 80
Total Memory 120 * 5 = 600GB
案例1:执行器内存中的内存开销部分。
spark.executor.memory=32G
spark.executor.cores=5
spark.executor.instances=14 (1 for AM)
spark.executor.memoryOverhead=8G ( giving more than 18.75% which is default)
spark.driver.memoryOverhead=8G
spark.driver.cores=5
案例2:内存开销不是执行器内存的一部分
spark.executor.memory=28G
spark.executor.cores=5
spark.executor.instances=14 (1 for AM)
spark.executor.memoryOverhead=6G ( giving more than 18.75% which is default)
spark.driver.memoryOverhead=6G
spark.driver.cores=5
根据下面的视频,我正在尝试使用节点的85%,即约100GB,不确定是否可以使用更多。 https://www.youtube.com/watch?v=ph_2xwVjCGs&list=PLdqfPU6gm4b9bJEb7crUwdkpprPLseCOB&index=8&t=1281s(4:12)