我正在使用在独立模式下配置的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作业使用的线程数的正确方法。
答案 0 :(得分:2)
你混淆了两件事:
SPARK_WORKER_CORES
- 工作人员可提供的核心总数。用它来控制Spark总共应该使用的一小部分资源--total-executor-cores
/ spark.cores.max
- 来自集群管理器的应用程序请求的核心数。使用它控制应用内并行性。只有第二个是直接负责应用程序并行性,只要第一个不限制。
Spark中的CORE
也是线程的同义词。如果你:
使用total-executor-cores设置为每个应用分配一个核心。
然后你专门指定一个数据处理线程。