概述

hadoop sls (Yarn Scheduler Load Simulator) 是 apache 官方提供的调度器模拟工具。可以模拟App资源请求与资源分配过程,分析调度器的负载与性能。支持Fair , fifo , capacity 三种调度器。

Hadoop sls 利用单机的方式,模拟大规模集群和应用程序负载。帮助我们进行参数和调度算法调优。

我们可以使用 Apache rumen 工具,直接生成配置文件,加载集群的大小和应用程序负载1

相关评价指标

  1. 整个集群和每个队列的资源使用率
  2. 详细应用程序执行跟踪,可以分析以了解/验证调度程序行为(单个作业转向时间,吞吐量,公平性,容量保证等)。
  3. 调度器算法的几个关键指标,例如每个调度器操作(分配,句柄等)的时间成本,Hadoop开发人员可以利用这些指标来查找代码点和可伸缩性限制。

工作原理

Hadoop SLS 通过解析JSON进行模拟,这个JSON是通过Hadoop Rumen 工具生成的,JSON 里包含了作业运行时的所有信息,如运行时间、提交用户、JOBID、MapTasks、ReduceTasks 等信息。

对于使用Hadoop SLS 分析时我们需要做以下几步操作,

1. 使用Hadoop Rumen 工具,从作业历史文件中(目前支持MapReduce HistoryServer 文件)生成模拟器使用的JSON。

2. 安装测试用的单机Hadoop, 并配置yarn-site.xml 和调度器类型(Fifo, Capacity,Fair)

3. 修改并配置$HADOOP_HOME/share/hadoop/tools/sls/sample-conf/sls-runner.xml (保证类加载时能找到这个文件)

4. 运行模拟器时指定用的JSON 文件和输出文件的位置

 

其JSON 片段如下:

运行例子程序

Hadoop SLS 提供了一个JSON文件例子,我们可以直接使用这个JSON文件来运行模拟器。

文件路径:$HADOOP_HOME/share/hadoop/tools/sls/sample-conf/2jobs2min-rumen-jh.json

我们可以直接使用以下命令运行例子程序,运行成功后可以到localhost:10001 查看运行时指标监控信息

 

2 3 4 5

 

生成自己的模拟程序

生成JSON时可以用如下命令(官方提供)

我在使用2.7.1 测试时,使用这条命令会因为找不到作业信息而执行失败。暂时可以将命令修改为如下方式解决(直接读取完成作业文件)。

 

备注,命令最后的目录请根据您的实际需要成您自己的目录。

 

总结

Hadoop SLS 可以帮助我们验证调度器算法的效率,同时也可以方便模拟分析在大作业量下调度器的负载情况,笔者在测试过程中遇到了一些坑。 比如2.7.1 版本的Rumen工具分析多机架环境下的Job 出错, 另外Rumen在分析作业历史文件时,如果这个作业是被Kill掉的并且Kill掉时Map和Reduce还没有开始运行,也会导致解析失败。