使用spark-submit, - length-executor-cores选项的行为是什么?

Mat*_*ner 11 multithreading hadoop cpu-cores apache-spark pyspark

我正在使用python包装的C++代码运行一个spark集群.我目前正在测试多线程选项的不同配置(在Python级别或Spark级别).

我在HDFS 2.5.4集群上使用带有独立二进制文件的spark.该集群目前由10个从站组成,每个从站有4个核心.

从我所看到的,默认情况下,Spark每个节点启动4个从站(我一次有4个python在从属节点上工作).

我怎样才能限制这个数字?我可以看到我有一个--total-executor-cores选项用于"spark-submit",但是关于它如何影响集群上执行程序分布的文档很少!

我将运行测试以获得一个清晰的想法,但如果知识渊博的人知道这个选项的作用,它可能有所帮助.

更新:

我再次浏览了spark文档,这是我的理解:

  • 默认情况下,每个工作节点一个执行程序(这里有10个工作节点,因此有10个执行程序)
  • 但是,每个工作人员可以并行运行多个任务.在独立模式下,默认行为是使用所有可用内核,这解释了为什么我可以观察4 python.
  • 要限制每个worker使用的核心数量,并限制并行任务的数量,我至少有3个选项:
    • 使用--total-executor-coreswhith spark-submit(最不令人满意,因为没有关于如何处理核心池的线索)
    • 使用SPARK_WORKER_CORES配置文件中
    • 使用-c选项和起始脚本

本文档的以下几行http://spark.apache.org/docs/latest/spark-standalone.html帮助我弄清楚发生了什么:

SPARK_WORKER_INSTANCES
在每台计算机上运行的工作程序实例数(默认值:1).如果您拥有非常大的机器并且想要多个Spark工作进程,则可以将其设置为1以上.如果设置了此项,请确保明确设置SPARK_WORKER_CORES以限制每个工作程序的核心,否则每个工作程序将尝试使用所有核心.

我还不清楚为什么在我的情况下将每个工作节点的并行任务数量限制为1并依赖于我的C++遗留代码多线程更好.当我完成学习时,我会用实验结果更新这篇文章.

Mik*_*kia 6

该文档似乎不清楚。

根据我的经验,最常见的分配资源的做法是指出执行者的数量和每个执行者的核心数量,例如(从此处获取):

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--num-executors 10 \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 4 \
--queue thequeue \
lib/spark-examples*.jar \
10
Run Code Online (Sandbox Code Playgroud)

但是,这种方法仅限于YARN,而不适用于独立和mesos基于星火,根据这个

相反,--total-executor-cores可以使用参数,该参数代表分配给Spark作业的所有执行器的核心总数。在您的情况下,总共有40个核心,设置属性--total-executor-cores 40将利用所有可用资源。

不幸的是,当提供的资源少于可用总数时,我不知道Spark如何分配工作负载。但是,如果同时处理两个或多个作业,则它对用户应该是透明的,因为Spark(或任何资源管理器)将根据用户设置来管理如何管理资源。


yjs*_*hen 4

要确定每个从属设备上启动了多少工作人员,请打开 Web 浏览器,输入http://master-ip:8080,然后查看workers有关已启动多少工作人员以及哪个从属设备上启动了哪些工作人员的部分。(我在上面提到这些是因为我不确定你所说的“每个节点 4 个从站”是什么意思)

默认情况下,spark 将在每个从站上启动确切的 1 个工作线程,除非您 SPARK_WORKER_INSTANCES=n在 conf/spark-env.sh 中指定,其中n是您希望在每个从站上启动的工作线程实例的数量。

当您通过spark-submit提交spark作业时,spark将为您的作业启动一个应用程序驱动程序和多个执行程序。

  • 如果没有明确指定,spark将为每个worker启动一个executor,即executor总数等于worker总数,并且所有核心都可用于该作业。
  • --total-executor-cores您指定的将限制该应用程序可用的核心总数。