首页 > 代码库 > Yarn调度器负载模拟器——Yarn Scheduler Load Simulator (SLS)

Yarn调度器负载模拟器——Yarn Scheduler Load Simulator (SLS)

一、概述:

Yarn调度器有许多实现,如Fifo, Capacity和Fair schedulers等。与其同时,正在进行一些优化措施来提高调度器在不同负载和工作场景下的性能。每个调度器都有自己的特性,调度决策受许多因素影响,如公平行、计算能力保证和资源的可靠性等。在部署一个调度算法到生产集群之前,评估一个调度算法是非常重要的,不幸的是,评估一个调度算法是不那么容易的,评估一个真正的集群是非常耗费时间和成本的,并且很难找到一个足够大的集群用来评测。所以,一个可以模拟在这种工作场景和负载下调度器的性能表现的模拟器是非常有用的。

Yarn模拟器可以在一台机器上模拟一个大型的集群和大量的应用负载,模拟器对于那些希望深入研究yarn的人员来说是非常宝贵的,因为它提供了一个工具:一个新的调度器原型、预测它的行为和性能表现,从而帮助他们快速创新。

Yarn模拟器通过在ResourceManagerjvm中模拟出NodeManagersApplicationMasters并处理和分发 NM/AM事件来去除网络因素的影响。为了trace调度器的行为和性能,在真正的调度器外层包裹了一个wrapper。

集群和应用负载可以从配置文件中加载,这些配置文件可以利用 Apache Rumen  job history files中直接生成。

模拟器在执行会产生实时的指标,如下所示:

  1. 整个集群和每个队列的资源利用率,可以用来配置集群和队列的容量;
  2. 详细的用模拟出来的时间记录的应用程序执行记录,可以用来分析、了解和验证程序的行为(个别job的周转时间、吞吐量、公平性和计算能力保证等);
  3. 调度算法的一些关键指标,如:每个调度操作花费的时间(分配、处理等等),开发者可以用来找出影响性能和可伸缩性的代码。
二、设计目标:

  1. 不用真正的集群和真正的job trace来检查调度器
  2. 可以模拟真实的负载
三、结构:

下图说明了模拟器的实现架构:


模拟器获取负载的描述,并获取到集群和应用的信息。对每个NM and AM,模拟器构造一个模拟器来模拟它们的运行,所有的NM and AM模拟器都在一个线程池中运行。模拟器共用RM,并在调度器外包裹一层wrapper,这个Scheduler Wrapper可以跟踪Scheduler并产生一些日志,模拟器产生的日志可以用作以后的分析。