apache-spark - AWS EMR 上的 Spark 作业的 CPU 利用率非常低
问题描述
我们有一个 spark 作业,它读取一个 csv 文件并应用一系列转换,并将结果写入一个 orc 文件,
火花作业分为近 20 个阶段并运行大约一个小时
input csv file size: 10 GB
spark-submit 作业资源配置:
driver-memory= 5 GB
num-executors= 2
executor-core= 3
executor-memory= 20 GB
EC2 实例类型:r5d.xlarge
ie 32GB Memory
and 4 vCPU
with attach128 GB EBS volume
EMR 集群包括1 Master Node
和2 Core machines
当我们在上述集群配置上运行 spark 作业时,cpu 利用率仅接近10-15%
我们的要求是最大限度地提高我的 spark 作业的 EC2 实例的 cpu 利用率。
感谢任何建议!
解决方案
AFAIK,如果您自动增加并行度,CPU 使用率将增加尝试在您的 Spark 作业配置中使用这些
num-executors= 4
executor-core= 5
executor-memory= 25 GB
特别是如果你增加 CPU 核心并行度会增加..
不建议每个执行器使用超过 5 个核心。这是基于一项研究,其中任何具有超过 5 个并发线程的应用程序都会开始影响性能。
spark.dynamicAllocation.enabled
可能是另一种选择。spark.default.parallelism
=2 * number of CPUs in total on worker
节点- 确保您始终使用纱线模式
按照aws docs 中的UsingmaximizeResourceAllocation
进行详细讨论。完整阅读
您可以通过使用 spark 配置分类将
maximizeResourceAllocation
选项设置为true
. 此 EMR 特定选项计算核心实例组中实例上的执行程序可用的最大计算和内存资源。然后它会根据此信息设置相应的 spark-defaults 设置。[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
进一步阅读
推荐阅读
- javascript - 如何使用 nextPage 属性从 JSON 加载更多产品卡
- c++ - 如何漂亮地打印 nlohmann::json json 文件?C++
- python - 如何在 Python 中确定 SQLite3 连接尝试是否成功
- python - Python为python中的列表元素添加前缀
- game-physics - 在单个时间间隔内将摩擦力应用于移动球模拟但更新循环计数不同的问题
- google-apps-script - Google Apps Script Webapp 的 SSO 登录
- reactjs - 我的 .find 函数与 data.js 的 id 与用户输入的 id 不匹配
- string - 无法在颤动中将firebase auth异常错误显示为toast消息
- java - rabbit mq 中的队列长时间处于空闲状态
- kotlin - .equals 函数在用于比较 2 个 livedata 对象时返回 false