【问题标题】:Is it possible for multiple Executors to be launched within a single Spark worker for one Spark Application?是否可以在单个 Spark 工作人员中为一个 Spark 应用程序启动多个执行程序?
【发布时间】:2017-08-17 02:26:08
【问题描述】:

我们正在运行的核心数量超出了 SPARK_WORKER_CORES(设置为 1)的预期。作为追踪这一点的一部分,让我们考虑几个 spark 组件及其在文档中的描述:

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

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

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

【问题讨论】:

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

标签: apache-spark


【解决方案1】:

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

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

$ ./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

【讨论】:

    【解决方案2】:

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

    为了配置集群,你可以试试这个:

    在 conf/spark-env.sh 中: Set the SPARK_WORKER_INSTANCES = 10 确定每个节点的 Worker 实例数(#Executors)(其默认值仅为 1) Set the SPARK_WORKER_CORES = 15# 一个 Worker 可以使用的核心数(默认:所有核心,你的情况是 36) Set SPARK_WORKER_MEMORY = 55g # 一台机器(工作节点)上可用于运行 Spark 程序的内存总量。 将此配置文件复制到同一文件夹中的所有工作节点 通过在 sbin (sbin/start-all.sh, ...) 中运行脚本来启动集群 由于您有 5 个工作人员,通过上述配置,您应该在主服务器的 Web 界面上看到 5(工作人员)* 10(每个工作人员的执行者)= 50 个活动的执行者(默认为http://localhost:8080

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

    val conf = new SparkConf() .setMaster(...) .setAppName(...) .set("spark.executor.memory", "2g") .set("spark.cores.max", "10")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2017-11-28
      相关资源
      最近更新 更多