概述

混合负载生成器(SLG)是用于在不同客户端负载情况下测试NameNode行为的工具。用户可以通过指定读取和写入的概率来生成读取,写入和列表请求的不同混合。用户通过调整工作线程数量和操作之间的延迟参数来控制负载强度。在负载生成器运行时,用户可以分析和监视NameNode的运行。当负载生成器退出时,它会输出一些NameNode统计信息,例如每种操作的平均执行时间和NameNode吞吐量。

该命令的概要是:

yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNloadGenerator [options]

选项包括:

  • -readProbability 读取概率
    读操作的概率; 默认值为0.3333。
  • -writeProbability 写入概率
    写操作的概率; 默认值为0.3333。
  • -root 测试空间根路径
    默认是/testLoadSpace。
  • -maxDelayBetweenOps maxDelayBetweenOpsInMillis
    线程中两个连续操作之间的最大延迟; 默认值为0表示没有延迟。
  • -numOfThreads
    默认值是200。
  • -elapsedTime elapsedTimeInSecs
    程序运行的秒数; 值为零表示程序一直运行。默认值为200。
  • -startTime startTimeInMillis
    所有工作线程开始运行的时间。默认情况下是主程序开始运行后10秒。如果有多个负载生成器正在运行,这会产生一个障碍。
  • -seed 种子
    随机生成器种子,用于在使用单个线程运行时重复对NameNode的请求; 默认是当前时间。

在命令行参数解析之后,负载生成器遍历测试空间并构建所有目录的表和测试空间中所有文件的另一个表。然后等待,直到开始时间产生用户指定的工作线程数。每个线程都向NameNode发送请求流。在每次迭代时,它首先决定是否要读取文件,创建文件,或者按照用户指定的读取和写入概率列出目录。在读取时,它会随机选择测试空间中的文件并读取整个文件。在写入时,它会随机选择测试空间中的目录并在那里创建文件。

要避免两个具有相同负载生成器的线程或两个不同的负载生成器创建相同的文件,文件名由当前计算机的主机名和线程ID组成。文件的长度遵循高斯分布,平均大小为2个块,标准差为1.新文件用字节'a'填充。为避免测试空间无限增长,文件创建完成后立即删除该文件。

操作完成后,如果指定的最大延迟不为零,则线程会在[0,maxDelayBetweenOps]范围内暂停一段随机时间。在退出之前,程序打印每种NameNode操作的平均执行次数,以及每秒NameNode服务的请求数。

Test Space Population

用户需要在运行负载生成器之前填充测试空间。结构生成器生成随机测试空间结构,数据生成器在Hadoop分布式文件系统中创建测试空间的文件和目录。

结构生成器

此工具生成具有以下约束的随机命名空间结构:

  1. 目录可以具有的子目录数是[minWidth,maxWidth]中的随机数。
  2. 每个子目录的最大深度是一个随机数[2 * maxDepth / 3,maxDepth]。
  3. 文件随机放置在叶子目录中。每个文件的大小遵循高斯分布,平均大小为1个块,标准差为1。

生成的命名空间结构由输出目录中的两个文件描述。第一个文件的每一行都包含叶子目录的全名。第二个文件的每一行包含文件的全名及其大小,以空格分隔。

该命令的概要是:

yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNstructureGenerator [options]

选项包括:

  • -maxDepth maxDepth
    目录树的最大深度; 默认值为5。
  • -minWidth minWidth
    每个目录的最小子目录数; 默认值为1。
  • -maxWidth maxWidth
    每个目录的最大子目录数; 默认值为5。
  • -numOfFiles #OfFiles
    测试空间中的文件总数; 默认值是10。
  • -avgFileSize avgFileSizeInBlocks
    块的平均大小; 默认值为1。
  • -outDir outDir
    输出目录; default是当前目录。
  • -seed 种子
    随机数发生器种子; 默认是当前时间。

数据生成器

此工具从输入目录中读取目录结构和文件结构,并在Hadoop分布式文件系统中创建命名空间。所有文件都填充字节'a'。

该命令的概要是:

yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNdataGenerator [options]

选项包括:

  • -inDir inDir
    输入目录/文件结构的目录名称; default是当前目录。
  • -root 测试空间根
    新命名空间将放在其下的根目录的名称; 默认为“/ testLoadSpace”