AWS EMR 上的 Spark:使用更多执行器
Posted
技术标签:
【中文标题】AWS EMR 上的 Spark:使用更多执行器【英文标题】:Spark on AWS EMR: use more executors 【发布时间】:2021-07-20 10:28:21 【问题描述】:长话短说:如何在 EMR 上的 Spark 中增加执行者的数量?
长篇大论:
我正在 EMR 6.3 (Spark 3.1.1) 上运行纯计算 scala spark 作业(估计 Pi 的蒙特卡洛方法)。纯计算的目标是不依赖 S3/parquet,并且能够毫无问题地进行扩展以进行测试。
val count = spark.sparkContext.parallelize(1 to 2147483647).filter _ =>
val x = math.random
val y = math.random
x*x + y*y < 1
.count()
println(s"Pi is roughly $4.0 * count / 2147483647")
没有为 spark-submit 提供设置,但在集群创建时提供了这些全局设置:
maximizeResourceAllocation: true(这是一个 EMR 特异性) spark.dynamicAllocation.shuffleTracking.enabled: true spark.default.parallelism: 128 spark.executor.instances: 0 spark.dynamicAllocation.enabled: true我可以通过 spark UI 确认这些设置已经生效。
我也可以确认 maximizeResourceAllocation
似乎可以完成它的工作:spark.executor.core
和 spark.executor.memory
的值与它们的实例匹配。
我的集群有 1 个主节点、4 个内核和 4 个任务,全部为 m6g.xlarge(4 个 vCore,15.3 GiB 内存)。
因此,我希望看到 8 个执行程序,最大限度地利用每个核心和任务实例(当然,+ 1 个驱动程序,但这与这里无关)。
即使我手动添加 --conf spark.dynamicAllocation.minExecutors=5
,我也只有 2 个执行者。
如何增加我的工作的执行者数量?
【问题讨论】:
【参考方案1】:如果您知道 FIXED 集群的最佳配置,最好不要使用动态分配。
--conf spark.dynamicAllocation.enabled=false \
--num-executors 8 \
--executor-cores 3 \
--executor-memory 13G
【讨论】:
有趣的是,使用这种配置,我最终只有 1 个执行器而不是 2 个。我很困惑。 你能检查纱线属性yarn.nodemanager.resource.memory-mb
吗?此外,只需尝试使用 --executor-memory 8G
来快速测试是否获取了配置
yarn.nodemanager.resource.memory-mb
of 12288 for executor-memory
of 8960M(由 EMR 自行选择)。如果我明确给出你的设置,我对 NM 内存有相同的设置,对执行程序内存有预期的 8G。
你看到只有 1 个执行器,上面配置为 8gb 吗??
我也看到了 2。以上是关于AWS EMR 上的 Spark:使用更多执行器的主要内容,如果未能解决你的问题,请参考以下文章
我的 spark 代码没有使用 Yarn aws EMR 中可用的所有执行器
为啥 AWS EMR 上的 Spark 不从应用程序 fat jar 加载类?