【发布时间】: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