合成负载生成器(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表示程序将无限期运行。默认值为0。
-startTime
startTimeInMillis
所有工作线程开始运行的时间。默认情况下是主程序启动后10秒。如果有多个负载生成器在运行,这将创建一个屏障。
-seed
seed
当以单线程运行时,用于向NameNode重复请求的随机生成器种子;默认为当前时间。
在完成命令行参数解析后,负载生成器会遍历测试空间,构建一个包含所有目录的表格和另一个包含测试空间中所有文件的表格。然后它会等待直到开始时间,按照用户指定的数量生成工作线程。每个线程会向NameNode发送一系列请求。在每次迭代中,线程首先根据用户指定的读写概率决定是读取文件、创建文件还是列出目录。列出目录的概率等于1减去读取概率再减去写入概率。当执行读取操作时,它会随机选择测试空间中的一个文件并读取整个文件。当执行写入操作时,它会随机选择测试空间中的一个目录并在该目录下创建文件。
为了避免两个线程使用相同的负载生成器,或者来自两个不同负载生成器的线程创建相同的文件,文件名由当前机器的主机名和线程ID组成。文件长度遵循高斯分布,平均大小为2个块,标准差为1。新文件填充字节'a'。为了避免测试空间无限增长,文件在创建完成后会立即删除。在列出时,它会随机选择测试空间中的一个目录并列出其内容。
操作完成后,如果指定的最大延迟不为零,线程会在[0, maxDelayBetweenOps]范围内随机暂停一段时间。当达到指定的运行时间后,所有线程都将停止。在退出前,程序会打印每种NameNode操作的平均执行时间,以及NameNode每秒处理的请求数量。
用户需要在运行负载生成器之前填充测试空间。结构生成器会随机生成测试空间结构,而数据生成器则在Hadoop分布式文件系统中创建测试空间的文件和目录。
该工具生成具有以下约束条件的随机命名空间结构:
一个目录可以拥有的子目录数量是一个在[minWidth, maxWidth]范围内的随机数。
每个子目录的最大深度是一个随机数 [2*maxDepth/3, maxDepth]。
文件被随机放置在叶子目录中。每个文件的大小遵循高斯分布,平均大小为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"。