首页 > 解决方案 > 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.xlargeie 32GB Memoryand 4 vCPUwith attach128 GB EBS volume

EMR 集群包括1 Master Node2 Core machines

当我们在上述集群配置上运行 spark 作业时,cpu 利用率仅接近10-15%

我们的要求是最大限度地提高我的 spark 作业的 EC2 实例的 cpu 利用率。

感谢任何建议!

标签: apache-sparkamazon-ec2amazon-emr

解决方案


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"
    }
  }
]

进一步阅读


推荐阅读