[英]Difference between SPARK_WORKER_CORES and SPARK_EXECUTOR_CORES?
[英]How SPARK_WORKER_CORES setting impacts concurrency in 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)增加到1000。 然后我为每个Spark应用程序提供了100个内核。 我发现此时火花开始并行处理100个分区,表明正在使用100个线程。
我不确定这是否是影响Spark作业使用的线程数的正确方法。
你混淆了两件事:
SPARK_WORKER_CORES
- 工作人员可以提供的核心总数。 用它来控制Spark总共应该使用的一小部分资源 --total-executor-cores
/ spark.cores.max
- 来自集群管理器的应用程序请求的核心数。 使用它控制应用内并行性。 只有第二个是直接负责app并行,只要第一个不限制。
Spark中的CORE
也是线程的同义词。 如果你:
使用total-executor-cores设置为每个应用程序分配一个核心。
然后你专门分配一个数据处理线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.