以下是如何为您的应用程序分配静态资源
您的集群总资源为
核心总数 32
总内存 244 GB
应为操作系统分配前 1 个核心和 1 GB,留下 243 GB RAM 和 33 个核心
Core 是 Spark 中的并发级别,因此您有 33 个内核,您可以同时运行 33 个并发进程。
接下来是执行者数量的计算。每个 executor 在自己的 JVM 进程中运行,每个 Worker 节点可以运行多个 executor。建议每个 executor 最多有 5 个并发进程,否则在单个 JVM 实例中将无法管理争用数量的并发进程。所以你需要在单个 Worker 节点上运行多个执行器。 33 / 5 = 6.6 并四舍五入为 6 所以可以有 6 个 Executors
将 243 GB 的 RAM 划分为 6 个执行程序将是 40.5,每个执行程序将其四舍五入为 40 GB
因此,在您的情况下,您将设置以下属性
Number of cores for each executor = 5
Number of Executors = 6
RAM = 40 GB
现在谈到您的另一个问题,即以下属性的目的
spark.driver.memory 是运行驱动程序进程所需的内存。由于我们在四舍五入时留下了一些内存,因此有足够的内存供驱动程序使用
spark.executor.memory 我们为上面的每个执行程序计算了 40 GB。这是每个执行器可用的内存
spark.driver.maxResultSize,这是运行 spark 作业并将结果返回给驱动程序后的最大大小。如果我们将其设置为 1 GB 并且返回结果大于 1 GB,那么我们可能会出现内存不足异常。