【问题标题】:can not set spark executor number larger than nodes不能设置大于节点的火花执行器编号
【发布时间】:2016-01-11 17:59:41
【问题描述】:

我按照以下说明操作 http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

我将 --num-executors 设置为 13,即使我只有 8 个工作节点。在 spark 程序中,我明确设置了大量的分区

val myPartitioner = new HashPartitioner(20)

spark 程序运行良好,但在执行器控制台中,始终只显示 8 个执行器。它不应该显示 13 吗?

【问题讨论】:

  • 每个工人有多少个核心?
  • 内存也是一样。您的集群中有多少内存以及您为每个工作人员请求多少内存?
  • 你是在单机模式还是YARN集群模式下运行?
  • 每个工人 8 个核心。每个节点 30GB 总内存。我分配--executor-memory 14G。 --master 纱线集群。这些参数将如何影响结果?问题是为什么我只看到 8 个执行者。

标签: apache-spark


【解决方案1】:

link中提到的--num-executors适用于YARN集群模式。

尝试在 conf/spark-env.sh 中设置以下环境变量,以增加单机或其他集群模式下的 worker 数量,

SPARK_WORKER_INSTANCES

在每台机器上运行的工作实例数(默认值:1)。如果你有非常大的机器并且想要多个 Spark 工作进程,你可以使这个大于 1。如果您确实设置了这个,请确保还明确设置 SPARK_WORKER_CORES 以限制每个工作人员的核心,否则每个工作人员将尝试使用所有核心。

【讨论】:

  • 工人实例的数量是否意味着每个节点的执行者数量?那么,默认的 1 就是为什么我不能得到 13 个执行者?
  • 是的,你是对的。工作实例的数量意味着每个节点的执行者数量。
  • 类似问题。为什么我需要同时设置 --num-executors 和 SPARK_WORKER_INSTANCES ?如果您将 SPARK_WORKER_INSTANCES 设置为 2,并且您有 8 个节点,那么它应该自动知道有 16 个执行器,对吗?顺便说一句,我使用的是纱线集群模式。也许您是说 SPARK_WORKER_INSTANCES 在这种情况下不相关。
【解决方案2】:

确保 spark.dynamicAllocation.enabled 设置为 false。默认设置为false,所以如果你不改变它,应该没问题。

通过在 spark-defaults.conf 中添加spark.executor.instances 13 来修改执行器的数量。或者通过添加你的代码:

conf = new SparkConf()
                .setMaster("yarn-client")
                ....
                .set("spark.executor.instances", "13") 

【讨论】:

  • 那么为什么我需要将 --num-executors 和 spark.executor.instances 都设置为 13?只设置两者之一或为它们设置不同的数字意味着什么?
  • 您不必同时设置两者。他们应该是同一个东西。您可以在此处找到有关在 Yarn 上配置 Spark 的更多信息:spark.apache.org/docs/latest/running-on-yarn.html 在该表中,您可以找到 spark.executor.instances 作为特定于 Spark on YARN 的配置
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 2019-07-30
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2020-06-04
相关资源
最近更新 更多