emr中长运行作业和多个小运行作业的资源优化/利用

w3nuxt5m  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(380)

我的用例:
我们有一个长期的工作。我打过电话给你,lrj。这项工作每星期进行一次。
我们有多个小的运行作业,可以随时来。这些作业的优先级高于长时间运行的作业。
为了解决这个问题,我们创建了如下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:我们尝试使用 maximum-capacity 配置根据Yarn文件,但它不工作,因为我在我的另一个问题张贴在这里

ffx8fchx

ffx8fchx1#

经过更多的分析,包括与一些无名英雄的讨论,我们决定根据我们的用例对Yarn队列应用抢占。
当发生以下事件序列时,q1队列上的作业将被抢占:
q1队列使用的资源超过了指定的容量(例如:lrj作业使用的资源超过了队列上指定的资源)。
突然,q2队列上的作业被调度(例如:突然触发多个正在运行的小作业)。
要理解先发制人,请阅读这个和这个
以下是我们在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站点配置:

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

有了以上内容,您必须根据您的用例在特定队列上指定作业。

相关问题