apache-spark - Spark SQL:所有执行者的活动任务都不相同
问题描述
spark 版本:2.4.4 scala: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 个执行者?
我的集群大小为 30GB RAM 和 aws 文档,超过 22GB 可用于应用程序,这就是我为每个执行程序配置 11GB 的原因,我预计有 20 个执行程序,因为我有 10 台机器。
如果我设置--executor-memory 6g,spark 最多会启动 20 个执行程序,如果我设置--executor-memory 8g,spark 最多会启动 14 个执行程序。我对 AWS EMR 和每台机器的容量并不十分清楚。
解决方案
您是否尝试设置--num-executors
为2
或更多以查看会发生什么?
遵循本优化 Spark 应用程序的最佳实践指南中提到的规则:Spark 应用程序的执行程序核心和内存的分布。
推荐阅读
- html - 此表可访问性是否安全
- css - 动画 SVG 路径的 stroke-dashoffset 导致 Safari 中的性能极度下降
- python - 我无法使用 cv2 的 VideoCapture 打开网络摄像头
- python - 如何在 Python 中创建 csv 时修复“没有这样的文件或目录”错误
- c++ - 如何检测地图迭代器中的最后一个元素
- python - Pandas - 应用于 lambda 函数的列中位数
- java - HK2InjectionManager 带球衣,使用 OpenJDK11 升级
- apache - AWS EC2 Apache 服务器正在运行,无法 ping/无法通过 Web 服务器访问
- c++ - 更好的方式来组织类之间的继承和关系
- python - 复制单元格包含多条数据的行