合成负载生成器指南

概述

合成负载生成器 (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 numOfThreads

    要生成的线程数;默认为 200。

  • -elapsedTime elapsedTimeInSecs

    程序运行的秒数;值为零表示程序一直运行。默认值为 0。

  • -startTime startTimeInMillis

    所有工作线程开始运行的时间。默认情况下,它在主程序开始运行后 10 秒。如果运行多个负载生成器,这将创建一个障碍。

  • -seed seed

    使用单个线程运行时重复向 NameNode 发送请求的随机生成器种子;默认值为当前时间。

在命令行参数解析后,负载生成器将遍历测试空间并构建所有目录的表和测试空间中所有文件的另一个表。然后,它将一直等到开始时间,以生成用户指定的数量的工作线程。每个线程都会向 NameNode 发送请求流。在每次迭代中,它首先决定是根据用户指定的读写概率读取文件、创建文件还是列出目录。列出概率等于 1 减去读取概率减去写入概率。在读取时,它将在测试空间中随机选择一个文件并读取整个文件。在写入时,它将在测试空间中随机选择一个目录并在其中创建一个文件。

为了避免具有相同负载生成器或来自两个不同负载生成器的两个线程创建相同的文件,文件名由当前计算机的主机名和线程 ID 组成。文件的长度遵循高斯分布,平均大小为 2 个块,标准差为 1。新文件将填充字节“a”。为了避免测试空间无限增长,文件在创建完成后将立即删除。在列出时,它将在测试空间中随机选择一个目录并列出其内容。

在操作完成后,如果指定的最大延迟不为零,则线程将在 [0, maxDelayBetweenOps] 范围内暂停一段时间。当指定的经过时间过去后,所有线程都将停止。在退出之前,程序将打印每种 NameNode 操作的平均执行时间,以及 NameNode 每秒处理的请求数。

测试空间填充

在运行负载生成器之前,用户需要填充一个测试空间。结构生成器生成一个随机测试空间结构,数据生成器在 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

    输出目录;默认值为当前目录。

  • -seed seed

    随机数生成器种子;默认值为当前时间。

数据生成器

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

该命令的概要是

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

选项包括

  • -inDir inDir

    存储目录/文件结构的输入目录名称;默认值为当前目录。

  • -root 测试空间根

    新命名空间将被放置在其下的根目录的名称;默认值为“/testLoadSpace”。