Apache spark 对于一个Spark应用程序,是否可能在单个Spark worker中启动多个执行器?

Apache spark 对于一个Spark应用程序,是否可能在单个Spark worker中启动多个执行器?,apache-spark,Apache Spark,我们正在运行的内核比SPARK_WORKER_cores(设置为1)预期的要多。作为跟踪这一点的一部分,让我们考虑几个火花成分及其在DOCS中的描述: 工作节点可以在群集中运行应用程序代码的任何节点 Executor为工作节点上的应用程序启动的进程,它运行任务并将数据保存在内存或磁盘存储中。每个应用程序都有自己的执行者。 最后一句话:对于单个应用程序,在给定的工作节点上是否可以有多个执行器?还是只有一个?是的,这是可能的。原则上,您可以将Spark配置为具有一定数量的执行器和每个执行器具有一

我们正在运行的内核比SPARK_WORKER_cores(设置为1)预期的要多。作为跟踪这一点的一部分,让我们考虑几个火花成分及其在DOCS中的描述:

  • 工作节点可以在群集中运行应用程序代码的任何节点

  • Executor为工作节点上的应用程序启动的进程,它运行任务并将数据保存在内存或磁盘存储中。每个应用程序都有自己的执行者。


最后一句话:对于单个应用程序,在给定的工作节点上是否可以有多个执行器?还是只有一个?

是的,这是可能的。原则上,您可以将Spark配置为具有一定数量的执行器和每个执行器具有一定数量的内核。节点的数量转化为纱线或其他集群如何处理资源,但AFAIK Spark对此几乎不可知

如果一个节点有足够的内存和内核,那么集群很可能会将两个执行器分配给同一个节点。归根结底,这些只是需要分发的资源。您将看到,中的配置示例与节点无关:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn-cluster \
    --num-executors 3 \
    --driver-memory 4g \
    --executor-memory 2g \
    --executor-cores 1 \
    lib/spark-examples*.jar \
    10

首先需要配置spark单机群集,然后设置要运行的每个spark应用程序所需的资源量

要配置群集,您可以尝试以下操作:

在conf/spark-env.sh中:
设置SPARK_WORKER_INSTANCES=10
,该值确定每个节点的WORKER实例(#Executors)数量(其默认值仅为1)
设置SPARK_WORKER_CORES=15
#一个WORKER可以使用的CORES数(默认值:所有CORES,您的案例为36)
Set SPARK_WORKER_MEMORY=55g
#一台机器(工作节点)上可用于运行SPARK程序的内存总量。 将此配置文件复制到同一文件夹中的所有工作节点 通过在sbin(sbin/Start-all.sh,…)中运行脚本来启动集群 由于您有5个工作线程,在上述配置中,您应该在主机的web界面上看到5(工作线程)*10(每个工作线程的执行器)=50个活动执行器(默认情况下)

当您以独立模式运行应用程序时,默认情况下,它将获取集群中所有可用的执行器。您需要显式设置运行此应用程序的资源量:例如:

val conf=new SparkConf()
.setMaster(…)
.setAppName(…)
.set(“spark.executor.memory”、“2g”)

.set(“spark.cores.max”,“10”)

您可以通过在启动工作进程之前设置
spark\u Worker\u实例来控制每个工作进程的执行器数量。默认值为1。(应该是“每主机”而不是“每工作者”。)您是如何确定使用的内核多于配置的内核的?@DanielDarabos mpstat-A 1显示了所有8个内核中cpu负载的相对均匀分布。这已经在不同的机器上运行,并且多次以相同的行为运行。