如何设置 Spark 执行器的数量?

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

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


答案 1

您也可以通过在 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 和独立模式。它允许应用程序在同一工作线程上运行多个执行器,前提是该工作线程上有足够的内核。


答案 2

在 Spark 2.0+ 版本中

使用 spark 会话变量动态设置执行器的数量(从程序内部)

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 根据运行作业的处理和内存要求来决定分配执行器的数量。

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

希望这会有所帮助。


推荐