分布式调度系统(3)——任务分配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式调度系统(3)——任务分配相关的知识,希望对你有一定的参考价值。
参考技术A将任务分配到具体执行节点。
以上配置信息保存在 /config/job/jobName 节点。
任务分配的目标是:让当前工作尽可能均衡地在各执行节点上执行。
触发任务分配的事件,可能是:
任务分配单元 : 将任务拆分为最小可执行的粒度,如:一个父任务、一个shard子任务,一个子任务,作为一个分配单元。每个分配单元包括:(父任务名称,子任务shardItem序号/childIndex流水号,load)。
待分配任务列表 :按任务分类,每个任务形成一个待分配列表,按load倒叙、sharingItem/childIndex正序 排序。
节点下线 :在节点下线的场景,需要将故障节点下的任务摘下,按任务放入多个待分配任务列表。
任务启动 :对于任务启动的场景,任务下所有的任务分配单元均需要重新分配,都放入到待分配任务列表中。
节点上线 :在节点上线的场景中,需读取 /config/node/nodeName 数据, 确定受影响的任务。读取 /runtime/job/jobName/availableNodes/nodeName 确认受影响的节点。 计算新节点上线后平均每节点load,从负载最多的节点摘下。摘取时,每次摘取不同任务,直至节点node在平均值以下。
构建节点列表,构建 Map<String /*node name*/ , Long /*node load*/ > 。
逐个任务分配,优先分配总load高的任务。
每个任务按load倒叙,每次分配分配到不同节点,优先分配总load低的node。
如果节点load已经高出平均值,则退出待分配node列表。
集群启动过程中, 节点不断加进来, 不断触发任务重新分配, 这是没有必要的。
冷冻时间 :集群初始启动过程中,第1个启动的节点确认没有其他节点后,会创建 /runtime/frozonTime 节点,节点数据为解冻的时间点(一般为5分钟后)。
在解冻时间到达之前,不触发任务分配。
创建冷冻节点的同时,清理availableNodes,和 /runtime/node/nodeName/job 。
集群收到 shutdown 调用后,开始关闭集群,关闭顺序:
分布式调度系统现状
来自于阿里云
https://edu.aliyun.com/course/31/learn?spm=5176.8764728.0.0.qDnlmZ#lesson/618
课时一:分布式调度系统的现状
分布式调度的两大任务:任务调度和资源调度
任务调度:大量的计算任务、任务如何让切分、数据如何分割运算、监控运算状态
资源调度:供给方、不同业务间的平衡资源、支持优先级抢占
分布式调度系统:Hadoop MR(map reduce) ,YARN, Mesos, Aliyun-Fuxi
hadoop的map-reduce 典型的主从关系,存在的问题是 规模扩展存在瓶颈,
1.每增加一个节点,task_track注册到job_track就要加载新的内存
2.容错性差,Job Tracker 单点没有failover 一旦宕机,就会造成信息丢失
3.不利于功能扩展,不同任务采用不同的调度策略
很难做到热拔插(不停止进程的情况下改变系统的调度行为)
YARN:
区别(与hadoop)
1.将资源调度与任务调度进行区分
2.可以支撑更大的计算规模
缺陷:
1.只支持内存维度的分配
2.资源的交互性能
{调度是一个背包问题:
考虑内存时,调度是一维线性规划,
增加资源时,调度是高维背包问题
所以YARN仅支持内存维度的问题
}
以上是关于分布式调度系统(3)——任务分配的主要内容,如果未能解决你的问题,请参考以下文章