SPARK_WORKER_CORES 设置如何影响 Spark Standalone 中的并发性

sco*_*pio 1 streaming distributed-computing apache-spark apache-spark-standalone

我使用的是在独立模式下配置的 Spark 2.2.0 集群。Cluster有2个八核机器。该集群专用于 Spark 作业,没有其他进程使用它们。我有大约 8 个 Spark Streaming 应用程序在这个集群上运行。
我将 SPARK_WORKER_CORES(在 spark-env.sh 中)明确设置为 8,并使用 total-executor-cores 设置为每个应用程序分配一个内核。此配置降低了在多个任务上并行工作的能力。如果一个 stage 在一个有 200 个分区的分区 RDD 上工作,则一次只执行一个任务。我想让 Spark 做的是为每个作业启动单独的线程并并行处理。但是我找不到单独的 Spark 设置来控制线程数。
因此,我决定尝试将每台机器上的内核数量(即 spark-env.sh 中的 SPARK_WORKER_CORES)增加到 1000。然后我为每个 Spark 应用程序提供了 100 个内核。我发现 spark 这次开始并行处理 100 个分区,表明正在使用 100 个线程。
我不确定这是否是影响 Spark 作业使用的线程数的正确方法。

hi-*_*zir 5

你混淆了两件事:

  • 集群管理器属性 -SPARK_WORKER_CORES工作人员可以提供的核心总数。使用它来控制应该由 Spark 总共使用的一小部分资源
  • 应用程序属性--total-executor-cores/ spark.cores.max- 应用程序从集群管理器请求的核心数。使用它控制应用内并行性。

只要第二个直接负责应用并行性,第一个没有限制。

同样CORE在Spark是线程的代名词。如果你:

使用 total-executor-cores 设置为每个应用程序分配一个核心。

然后您专门分配一个数据处理线程。