SPARK_WORKER_CORES设置如何影响Spark Standalone

时间:2018-01-29 06:15:05

标签: apache-spark streaming distributed-computing apache-spark-standalone

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

1 个答案:

答案 0 :(得分:2)

你混淆了两件事:

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

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

Spark中的CORE也是线程的同义词。如果你:

  

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

然后你专门指定一个数据处理线程。