Yarn模拟器是 一个能够在一台机器上装载应用程序,模拟一个大规模的yarn集群的工具。模拟器使用实际的yarn resourcemanager,在相同的java虚拟机内,通过处理和调度NM/AMs心跳事件,模拟NodeManager和ApplicationMaster来移除网络因素。集群的规模和应用负载可以从配置文件中加载。
模拟器在执行时会产生实时的指标:
1) 整个集群和每个队列的资源使用率,可以被用来配置集群和队列的容量。
2) 详细的应用程序执行跟踪记录可以用来分析,以便理解和验证调度器的行为(包括工作的周转时间、生产量、公平性、容量保证等)
3) 调度算法的关键指标

模拟器的位置在$HADOOP_HOME/share/Hadoop/tools/sls,包括1)bin:包含运行模拟器的脚本 2)html:主要是我们进行实时跟踪时需要的一些html/css/js文件。3)sample-conf:主要存放模拟器的配置文件。4)sample-data:提供了一个例子来进行跟踪,可以将里面的文件作为输入文件。

如何使用模拟器?

1、 参数配置
将hadoop和模拟器的所有配置文件放在目录$HADOOP_HOME/etc/hadoop中,ResourceManager和Yarn从这个目录加载文件。
Sls-runner.xml是模拟器配置文件,配置参数如下:
Yarn.sls.runner.pool.size 模拟器使用一个线程池来模拟NM/AM运行,这个参数可以设置线程池中的线程数
Yarn.sls.nm.memory.mb 设置每个NM模拟器的总内存大小
Yarn.sls.nm.vcores 设置每个NM模拟器的虚拟cpu的数目
Yarn.sls.nm.heartbeat.interval.ms 设置每个NM模拟器的心跳间隔
Yarn.sls.am.heartbeat.interval.ms 设置每个AM模拟器的心跳间隔
Yarn.sls.am.type.mapreduce AM模拟器为类似MapReduce程序进行模拟,可以设置成其他类型的应用程序
Yarn.sls.container.memory.mb 每个container模拟器的内存
Yarn.sls.container.vcores 每个container模拟器的虚拟cpu
Yarn.sls.runner.metrics.switch 模拟器可以通过一些指标来估量关键组件和运作的行为,这个参数可以配置是否使用该机制
Yarn.sls.metrics.web.address.port 模拟器使用该端口来进行实时跟踪,默认是10001
Rg.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler FIFO调度器的调度器指标的实现
Rg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler Fair调度器的调度器指标的实现
Rg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler Capacity调度器的调度器指标的实现
2、 命令详解
模拟器命令主要涉及两个脚本,rumen2sls.sh和slsrun.sh

  1. rumen2sls.sh :模拟器支持两种类型输入文件,rumen和sls。Rumen格式将各作业调度需要的各种资源以及模拟的拓扑结构分别放在不同的文件里。
    Rumen2sls.sh的具体命令如下:
$HADOOP_HOME/share/Hadoop/tools/sls/bin/rumen2sls.sh  --rumen-file=\<RUMEN_FILE>  --output-dir=\<SLS_OUTPUT_DIRECTORY>  [--output-prefix=<SLS_FILE_PREFIX>]

Rumen-file:rumen格式的文件
Output-dir:生成的模拟器trace的输出目录。
Output-prefix:在生成的文件中添加前缀。默认是sls,有两个生成的文件,sls-jobs.json和sls-nodes.json
2) slsrun.sh:
具体命令如下:

$HADOOP_HOME/share/Hadoop/tools/sls/bin/slsrun.sh  --input-remen|--input-sls=<TRACE_FILE1,TRACE_FILE2……>  --output-dir=<SLS_SIMULATION_OUTPUT_DIRECTORY>  [--nodes=<SLS_NODES_FILE>]  [--track-jobs=<JOBID1,JOBID2……>]   [--print-simulation]

Input-rumen:用来输入remen trace文件。用户一次可以输入多个文件,用逗号隔开
Input-sls:模拟器自己的文件格式
Output-dir:生成的运行日志和指标的输出路径
Nodes:集群的拓扑结构。模拟器默认从输入的json文件取得该拓扑结构
Track-jobs:特定的作业在调度器运行时被追踪
Print-simulation:在模拟器运行之前是否打印出模拟信息
3、 web查看
将生成的metrics文件夹存放所有生成的指标日志,将json文件拷贝到sls/html文件夹中,然后打开showSimulationTrace.html,建议用firefox浏览器,选择拷贝过来的文件,单击“生成”按钮,即可查看离线结果。