【问题标题】:Optimal memory allocation for Apache SparkApache Spark 的最佳内存分配
【发布时间】:2017-07-16 21:36:19
【问题描述】:

我在具有 244GB 内存的 32 核系统上使用 Apache Spark。我正在运行一个基于树的算法,我需要分别种植 500 棵树。当我有一个可以并行化为 500 个进程的进程时,在这种情况下我的最佳 spark 设置应该是什么

我对 spark 很陌生,spark.driver.memoryspark.executor.memoryspark.driver.maxResultSize 的含义对我来说并不完全清楚。但从文档看来,这些变量是优化分配的关键。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    以下是如何为您的应用程序分配静态资源

    您的集群总资源为 核心总数 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,那么我们可能会出现内存不足异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多