快手超大规模计算集群调度优化实践
快手数据平台部房孝敬在快手大规模计算集群中负责大数据资源调度方向,拥有Hadoop、Spark、K8s contributor的经验,关注分布式调度和分布式计算领域。在本次分享中,房孝敬将介绍快手超大规模计算集群调度优化的实践经验。
首先,快手大数据规模场景包括单集群规模数万台、每天处理数据量数百PB、每天作业量近百万。为了满足如此庞大的数据规模,快手需要一个高效的调度器来管理计算资源。
YARN背景
YARN(Yet Another Resource Negotiator)是Apache项目,于Hadoop 2.0中引入。YARN架构主要组件包括ResourceManager和NodeManager。ResourceManager负责管理整个集群的资源,NodeManager负责管理单个节点的资源。
YARN调度器是YARN架构的核心组件,负责将应用程序分配到合适的节点上。调度器的作用是快速分配应用程序到合适的节点上,提高计算资源的利用率。YARN调度器的调度策略包括如何选取应用程序、如何选取节点等。
然而,YARN社区调度器存在一些缺陷,例如单线程调度性能不高、调度策略不够灵活等。因此,快手开发了自己的调度器Kwaischeduler,基于Fairscheduler优化单线程调度性能,自研Kwaischeduler优化性能和扩展调度策略。
Kwaischeduler架构基于集群状态做全局调度,具有极致的性能和可扩展的调度策略。Kwaischeduler调度流程包括基于snapshot调度、多线程并发调度和调度策略可扩展等。Kwaischeduler-policy实现filter、Score接口,policy独立可扩展。
Kwaischeduler上线效果非常显著,支撑单集群数万台机器、1万+并发作业,调度吞吐峰值5w/s+,资源分配率93%+,并支撑多调度场景。
在快手超大规模计算集群中,Kwaischeduler优化了多种调度场景,包括离线ETL场景、Adhoc即时查询场景、机器学习训练场景和Flink实时作业场景等。通过Kwaischeduler的优化,快手大规模计算集群的计算资源利用率得到了大幅提高。
快手超大规模计算集群调度优化实践为我们展示了如何使用Kwaischeduler来优化大规模计算集群的调度性能,提高计算资源的利用率。