【问题标题】:Spark SQL: active task is not same for all executorsSpark SQL:所有执行者的活动任务都不相同
【发布时间】:2020-03-21 16:11:35
【问题描述】:

火花版本:2.4.4 标量:2.11 部署在 aws emr 上

集群配置:

火花配置:

          "--deploy-mode",
          "cluster",
          "--master",
          "yarn",
          "--conf",
          "spark.sql.session.timeZone=Europe/Paris",
          "--conf",
          "spark.yarn.maxAppAttempts=1",
          "--conf",
          "spark.driver.maxResultSize=4g",
          "--executor-cores",
          "5",
          "--conf",
          "spark.sql.autoBroadcastJoinThreshold= 1073741824",
          "--executor-memory",
          "11g",
          "--driver-memory",
          "12g",

Q1:我会加载一个超过 60G 的文件夹,一个执行者比其他执行者多一个任务,我不明白为什么要多一个任务。

是不是因为一组值的散列函数的结果更大,所以这个执行器需要再完成一项任务? Q2:为什么我只有 8 个 executor?

我的集群大小为 30GB RAM 和 aws 文档,超过 22GB 可用于应用程序,这就是我为每个执行程序配置 11GB 的原因,我预计有 20 个执行程序,因为我有 10 台机器。

如果我设置--executor-memory 6g,spark最多会启动20个executor,如果我设置--executor-memory 8g,spark会在最多 14 个执行者。我对 AWS EMR 和每台机器的容量并不十分清楚。

【问题讨论】:

  • 似乎有 8 个工作节点,因此您有 8 个执行器,默认情况下每个工作节点一个。您可以通过将--num-executors 设置为大于 1 来更改该数字。
  • @oldwooki 如果您查看第一张图片,您将看到一个由 10 台机器组成的集群。由于我只将执行器 ram 设置为每台机器有 2 个执行器,我认为 spark 足够聪明,可以启动 20 个执行器,这不是 spark 的行为吗?我会尝试强制 num-executors 看到。
  • 您应该查看文档 spark 如何使用内存。

标签: apache-spark apache-spark-sql


【解决方案1】:

您是否尝试将--num-executors 设置为2 或更多以查看会发生什么?

遵循本优化 Spark 应用程序最佳实践指南中提到的规则:Distribution of executors cores and memory for Spark Application

【讨论】:

  • --num-executors 定义了执行器的总数,我尝试了 20 个,但是当 executor ram 设置为 11G 时,我仍然只有 8 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多