如何限制spark任务占用yarn资源的最大内存和cpu

在使用 spark-submit 提交 PySpark 作业时,可以通过设置一些参数来限制任务占用的 YARN 资源,包括内存和CPU。以下是一些关键的配置选项:

  1. 内存限制
    • --executor-memory: 为每个执行器设置内存。这是执行器可以使用的最大内存量。
    • --driver-memory: 为驱动器(即提交作业的节点)设置内存。
    • --conf "spark.yarn.executor.memoryOverhead": 为每个执行器设置额外的非堆内存(超出JVM堆内存之外的内存)。
    • --conf "spark.driver.memoryOverhead": 为驱动器设置额外的非堆内存。
  2. CPU限制
    • --executor-cores: 为每个执行器设置可用的核心数。
    • YARN 本身不直接通过 spark-submit 提供CPU限制参数,因为YARN主要通过内存来调度任务。然而,通过限制每个执行器的核心数,可以间接限制执行器可以使用的CPU资源。
  3. 其他配置
    • --num-executors: 设置作业的执行器数量。这可以间接控制资源使用,因为过多的执行器可能会占用更多的资源。
    • spark.dynamicAllocation.enabled: 禁用动态分配,试过没加这个,别的设置都有了还是自动动态分配资源。

为了限制作业的最大资源使用,您可以调整上述参数。例如,如果您希望限制作业使用的总内存和CPU,可以这样做:

复制spark-submit --master yarn \
  --deploy-mode cluster \
  --num-executors 10 \          # 设置执行器数量
  --executor-memory 2g \       # 为每个执行器设置2GB内存
  --driver-memory 1g \         # 为驱动器设置1GB内存
  --executor-cores 2 \         # 为每个执行器设置2个核心
  --conf "spark.yarn.executor.memoryOverhead=1024m" \ # 设置每个执行器的非堆内存
  --conf "spark.driver.memoryOverhead=1024m" \        # 设置驱动器的非堆内存
  --conf "spark.dynamicAllocation.enabled=false" \     # 禁用动态分配,避免自动增加执行器
  zinvert_cdh03/pysparkTest.py

请注意,设置资源限制时需要考虑作业的实际需求,以避免资源不足导致作业执行失败。同时,您可能需要与集群管理员协商,以确保作业的资源请求不会超过集群的容量。

另外,spark-submit 命令中的 --conf 参数允许您设置非常多的 Spark 配置选项,包括与资源相关的。您可以通过查看 Spark 的官方文档来了解更多关于这些配置的详细信息。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注