【问题标题】:Experiencing very Low CPU utilization of Spark Jobs on AWS EMRAWS EMR 上的 Spark 作业的 CPU 利用率非常低
【发布时间】:2020-08-05 22:43:21
【问题描述】:

我们有一个 spark 作业,它读取一个 csv 文件并应用一系列转换,并将结果写入一个 orc 文件,

spark 作业分为近 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.xlarge32GB Memory4 vCPU 附加128 GB EBS volume

EMR 集群由1 Master Node2 Core machines 组成

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

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

感谢任何建议!

【问题讨论】:

  • 无论是工作不工作还是有问题,您都可以添加 cmets...

标签: apache-spark amazon-ec2 amazon-emr


【解决方案1】:

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 节点
  • 确保始终使用纱线模式

关注Using maximizeResourceAllocation from aws docs there all these things are discussed in detail. Read it completely

您可以通过使用 spark 配置分类将maximizeResourceAllocation 选项设置为true 来配置您的执行程序以利用集群中每个节点上可能的最大资源。此 EMR 特定选项计算核心实例组中实例上的执行程序可用的最大计算和内存资源。然后它会根据这些信息设置相应的 spark-defaults 设置。

[
  {
    "Classification": "spark",
    "Properties": {
      "maximizeResourceAllocation": "true"
    }
  }
]

进一步阅读

【讨论】:

  • 有用吗?一般来说,java 线程会增加 spark 核心中的 cpu 使用率,这会增加 cpu 使用率,同时使用 aws emr 应用所有可能的并行设置。如答案中所述
  • 感谢 Ram,我离开了一小会儿,尽管我有 1 个疑问,但上述信息很有用: spark.default.parallelism = 2 * worker 上的 CPU 总数,这是默认值,但是对于任何给定的 Spark 作业,理想的任务数应该是多少,有什么步骤可以计算吗?同时,确保较小的作业不会因为任务数量的增加而受到影响,以实现更多的并行度
  • 没有银弹或计算。只需 spark.default.parallelism = 2 * CPU 数量
  • 如果你还好,请注意接受the answer as ownervote-up
  • 我们可以关闭accepting the answer as owner?的线程
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2019-11-22
相关资源
最近更新 更多