searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

YARN基于NM负载感知调度

2024-05-29 09:26:12
36
0

       YARN的调度按照调度方式分类可分为心跳调度和全局调度。心跳调度顾名思义就基于心跳的调度,当前分配container 到哪个机器取决于此时收到哪台机器心跳汇报,RM收到NM的心跳信息,做一些check,有资源则分配。另外一种全局调度,是可以统筹调度所有节点节点,按照排列的顺序调度到哪些节点(节点有独立线程根据其内存和CPU资源排序)。

      当前YARN的调度没有收集NM的机器实际load,physical mem,disk,net信息,导致很多任务分配到了负载高的节点导致长尾任务。大大延整个任务运行时长。我们通过RM考虑NM负载重新实现调度策略:NM测定时采集这些负载信息,并且通过心跳RPC汇报给RM。RM测获取到每个NM的负载信息,RM测获取到信息后,在调度时,通过给定的策略,综合考虑已分配内存,cpu,机器负载,网络情况对节点进行打分排序。影响因素的影响比重是可以动态配置的,比如配置memory:40,load:30,disk:15,net:15,假如mem都用完,直接会mem得分40分。最后分数最低的是最适合调度节点。下面图只是说明一个映射方式:

NM 汇报资源功能开发好后,需要开启RM的全局调度并且实现排序policy才能生效。

RM开启全局调度修改scheduler 配置文件添加:

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.enable</name>
    <value>true</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.maximum-threads</name>
    <value>2</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.maximum-pending-backlogs</name>
    <value>1000</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.scheduling-interval-ms</name>
    <value>10</value>
</property>

<property>
    <name>yarn.scheduler.capacity.multi-node-placement-enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy.names</name>
    <value>resource-based</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy</name>
    <value>resource-based</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy.resource-based.class</name>
    <!--value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicy</value-->
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.新的调度策略类</value> 
</property>

 

0条评论
0 / 1000
王****伟
5文章数
0粉丝数
王****伟
5 文章 | 0 粉丝
原创

YARN基于NM负载感知调度

2024-05-29 09:26:12
36
0

       YARN的调度按照调度方式分类可分为心跳调度和全局调度。心跳调度顾名思义就基于心跳的调度,当前分配container 到哪个机器取决于此时收到哪台机器心跳汇报,RM收到NM的心跳信息,做一些check,有资源则分配。另外一种全局调度,是可以统筹调度所有节点节点,按照排列的顺序调度到哪些节点(节点有独立线程根据其内存和CPU资源排序)。

      当前YARN的调度没有收集NM的机器实际load,physical mem,disk,net信息,导致很多任务分配到了负载高的节点导致长尾任务。大大延整个任务运行时长。我们通过RM考虑NM负载重新实现调度策略:NM测定时采集这些负载信息,并且通过心跳RPC汇报给RM。RM测获取到每个NM的负载信息,RM测获取到信息后,在调度时,通过给定的策略,综合考虑已分配内存,cpu,机器负载,网络情况对节点进行打分排序。影响因素的影响比重是可以动态配置的,比如配置memory:40,load:30,disk:15,net:15,假如mem都用完,直接会mem得分40分。最后分数最低的是最适合调度节点。下面图只是说明一个映射方式:

NM 汇报资源功能开发好后,需要开启RM的全局调度并且实现排序policy才能生效。

RM开启全局调度修改scheduler 配置文件添加:

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.enable</name>
    <value>true</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.maximum-threads</name>
    <value>2</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.maximum-pending-backlogs</name>
    <value>1000</value>
</property>

<property>
    <name>yarn.scheduler.capacity.schedule-asynchronously.scheduling-interval-ms</name>
    <value>10</value>
</property>

<property>
    <name>yarn.scheduler.capacity.multi-node-placement-enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy.names</name>
    <value>resource-based</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy</name>
    <value>resource-based</value>
</property>
<property>
    <name>yarn.scheduler.capacity.multi-node-sorting.policy.resource-based.class</name>
    <!--value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicy</value-->
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.新的调度策略类</value> 
</property>

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0