【问题标题】:How to set amount of Spark executors?如何设置 Spark 执行器的数量?
【发布时间】:2014-11-27 21:08:23
【问题描述】:

如何从 Java(或 Scala)代码中配置具有 SparkConfigSparkContext 的执行程序数量?我经常看到 2 个执行者。看起来spark.default.parallelism 不起作用并且是关于不同的东西。

我只需要将执行器的数量设置为等于集群大小,但始终只有 2 个。我知道我的集群大小。如果这很重要,我会在 YARN 上运行。

【问题讨论】:

    标签: java scala cluster-computing apache-spark hadoop-yarn


    【解决方案1】:

    好的,知道了。 executors 的数量实际上并不是 Spark 属性本身,而是用于在 YARN 上放置作业的驱动程序。因此,当我使用 SparkSubmit 类作为驱动程序时,它具有适当的 --num-executors 参数,这正是我所需要的。

    更新:

    对于某些工作,我不再遵循SparkSubmit 方法。我不能主要针对 Spark 作业只是应用程序组件之一(甚至是可选的)的应用程序。对于这些情况,我使用附加到集群配置的spark-defaults.conf 和其中的spark.executor.instances 属性。这种方法更加通用,允许我根据集群(开发人员工作站、登台、生产)适当地平衡资源。

    【讨论】:

    • 属性spark.default.parallelism 用于join、reduceByKey、groupBy等reduce操作。
    【解决方案2】:

    您也可以通过在 SparkConf 对象上设置参数“spark.executor.instances”和“spark.executor.cores”以编程方式完成。

    例子:

    SparkConf conf = new SparkConf()
          // 4 executor per instance of each worker 
          .set("spark.executor.instances", "4")
          // 5 cores on each executor
          .set("spark.executor.cores", "5");
    

    第二个参数仅适用于 YARN 和独立模式。它允许应用程序在同一个 worker 上运行多个 executor,前提是该 worker 上有足够的核心。

    【讨论】:

      【解决方案3】:

      在 Spark 2.0+ 版本中

      使用 spark session 变量动态设置执行器的数量(从程序中)

      spark.conf.set("spark.executor.instances", 4)
      spark.conf.set("spark.executor.cores", 4)
      

      在上述情况下,在任何给定时间最多将执行 16 个任务。

      其他选项是执行器的动态分配,如下所示 -

      spark.conf.set("spark.dynamicAllocation.enabled", "true")
      spark.conf.set("spark.executor.cores", 4)
      spark.conf.set("spark.dynamicAllocation.minExecutors","1")
      spark.conf.set("spark.dynamicAllocation.maxExecutors","5")
      

      这是您可以让 spark 根据运行作业的处理和内存要求来决定分配执行器的数量。

      我觉得第二个选项比第一个选项效果更好,并且被广泛使用。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        在我的实验室中,我们在使用 hdfs 上的数据运行 Spark on Yarn 时遇到了类似的问题,但无论我尝试了上述哪种解决方案,我都无法将 Spark 执行器的数量增加到两个以上。

        结果数据集太小(小于 128 MB 的 hdfs 块大小),并且由于 hadoop 的默认数据复制启发式算法,仅存在于两个数据节点(我的集群中的 1 个主节点,7 个数据节点)上。

        一旦我和我的实验室伙伴有更多的文件(和更大的文件)并且数据分布在所有节点上,我们可以设置 Spark 执行器的数量,最后看到 --num-executors 和完成时间之间的反比关系.

        希望这可以帮助处于类似情况的其他人。

        【讨论】:

          猜你喜欢
          • 2015-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-04
          • 1970-01-01
          • 2021-12-24
          相关资源
          最近更新 更多