【问题标题】:Resource optimization/utilization in EMR for long running job and multiple small running jobsEMR 中针对长时间运行的作业和多个小型运行的作业的资源优化/利用
【发布时间】:2020-06-29 13:16:07
【问题描述】:

我的用例:

  • 我们有一个长期运行的 Spark 作业。在这里调用后,LRJ。该作业每周运行一次。
  • 我们有多个可以随时运行的小型作业。这些 作业的优先级高于长时间运行的作业。

为了解决这个问题,我们创建了如下的 YARN 队列:

为资源管理创建了 YARN 队列。为长时间运行的作业配置了 Q1 队列,为小型运行的作业配置了 Q2 队列。

Config:
     Q1 : capacity = 50% and it can go upto 100%
          capacity on CORE nodes = 50% and maximum 100%   
     Q2 : capacity = 50% and it can go upto 100%
          capacity on CORE nodes = 50% and maximum 100% 

我们面临的问题:

当 LRJ 正在进行时,它会获取所有资源。当 LRJ 获得所有资源时,多个小型正在运行的作业等待。一旦集群扩大规模并且有新资源可用,小型正在运行的作业就会获得资源。但是,由于集群需要时间来扩展活动,这会在为这些作业分配资源时造成显着延迟。

更新 1: 我们已经尝试按照YARN docs 使用maximum-capacity 配置,但它无法正常工作,因为我在我的另一个问题here 中发布了

【问题讨论】:

    标签: apache-spark hadoop hadoop-yarn amazon-emr long-running-processes


    【解决方案1】:

    经过更多分析,其中涉及与一些无名英雄的讨论,我们决定根据我们的用例对 YARN 队列应用抢占

    当发生以下事件序列时,Q1 队列中的作业将被抢占:

    1. Q1 队列使用的容量超过了指定的容量(示例:LRJ 作业 正在使用的资源超过队列中指定的资源)。
    2. Q2 队列上的作业突然被调度(例如:突然触发了多个正在运行的小型作业)。

    要了解抢占,请阅读thisthis

    以下是示例配置,我们在 AWS CloudFormation 脚本中使用它来启动 EMR 集群:

    容量调度器配置:

            yarn.scheduler.capacity.resource-calculator: org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
            yarn.scheduler.capacity.root.queues: Q1,Q2
            yarn.scheduler.capacity.root.Q2.capacity: 60
            yarn.scheduler.capacity.root.Q1.capacity: 40
            yarn.scheduler.capacity.root.Q2.accessible-node-labels: "*"
            yarn.scheduler.capacity.root.Q1.accessible-node-labels: "*"
            yarn.scheduler.capacity.root.accessible-node-labels.CORE.capacity: 100
            yarn.scheduler.capacity.root.Q2.accessible-node-labels.CORE.capacity: 60
            yarn.scheduler.capacity.root.Q1.accessible-node-labels.CORE.capacity: 40
            yarn.scheduler.capacity.root.Q1.accessible-node-labels.CORE.maximum-capacity: 60
            yarn.scheduler.capacity.root.Q2.disable_preemption: true
            yarn.scheduler.capacity.root.Q1.disable_preemption: false
    

    yarn-site 配置:

            yarn.resourcemanager.scheduler.class: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
            yarn.resourcemanager.scheduler.monitor.enable: true
            yarn.resourcemanager.scheduler.monitor.policies: org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy
            yarn.resourcemanager.monitor.capacity.preemption.monitoring_interval: 2000
            yarn.resourcemanager.monitor.capacity.preemption.max_wait_before_kill: 3000
            yarn.resourcemanager.monitor.capacity.preemption.total_preemption_per_round: 0.5
            yarn.resourcemanager.monitor.capacity.preemption.max_ignored_over_capacity: 0.1
            yarn.resourcemanager.monitor.capacity.preemption.natural_termination_factor: 1
    

    使用上述内容,您必须根据您的用例在特定队列中指定您的作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2022-09-28
      相关资源
      最近更新 更多