合成負荷ジェネレーター (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
スレッド内の 2 つの連続した操作間の最大遅延。デフォルトは遅延がないことを示す 0 です。
-numOfThreads
numOfThreads
生成するスレッドの数。デフォルトは 200 です。
-elapsedTime
elapsedTimeInSecs
プログラムが実行される秒数。値がゼロの場合、プログラムは永続的に実行されます。デフォルト値は 0 です。
-startTime
startTimeInMillis
すべてのワーカー スレッドが実行を開始する時間。デフォルトでは、メイン プログラムの実行開始から 10 秒後です。これにより、複数の負荷ジェネレーターが実行されている場合にバリアが作成されます。
-seed
シード
単一スレッドで実行する場合に NameNode へのリクエストを繰り返すための乱数ジェネレーター シード。デフォルトは現在の時間です。
コマンドライン引数の解析後、負荷ジェネレーターはテストスペースをトラバースし、テストスペース内のすべてのディレクトリのテーブルと、すべてのファイルの別のテーブルを作成します。次に、開始時間まで待機して、ユーザーが指定した数のワーカー スレッドを生成します。各スレッドは、NameNode にリクエストのストリームを送信します。各イテレーションで、最初に、ユーザーが指定した読み取りおよび書き込みの確率に従って、ファイルを読み取るか、ファイルを作成するか、ディレクトリをリストするかを決定します。リストの確率は、1-読み取り確率-書き込み確率に等しくなります。読み取り時には、テストスペース内のファイルをランダムに選択して、ファイル全体を読み取ります。書き込み時には、テストスペース内のディレクトリをランダムに選択して、そこにファイルを作成します。
同じ負荷ジェネレーターまたは 2 つの異なる負荷ジェネレーターから同じファイルを作成する 2 つのスレッドを回避するために、ファイル名には現在のマシンのホスト名とスレッド ID が含まれています。ファイルの長さは、平均サイズが 2 ブロック、標準偏差が 1 のガウス分布に従います。新しいファイルはバイト 'a' で埋められます。テストスペースが際限なく拡大しないように、ファイルは作成完了後すぐに削除されます。リスト中に、テストスペース内のディレクトリをランダムに選択して、そのコンテンツをリストします。
操作が完了すると、指定された最大遅延がゼロでない場合、スレッドは [0, maxDelayBetweenOps] の範囲でランダムな時間だけ一時停止します。指定された経過時間が経過すると、すべてのスレッドが停止されます。終了する前に、プログラムは NameNode 操作の各種類の平均実行時間と、NameNode が 1 秒あたりに処理したリクエスト数を出力します。
ユーザーは、負荷ジェネレーターを実行する前にテストスペースを作成する必要があります。構造ジェネレーターはランダムなテストスペース構造を生成し、データジェネレーターは Hadoop 分散ファイルシステムのテストスペースのファイルとディレクトリを作成します。
このツールは、次の制約を使用してランダムな名前空間構造を生成します。
ディレクトリが持つことができるサブディレクトリの数は、[minWidth, maxWidth] の範囲の乱数です。
各サブディレクトリの最大深度は、[2*maxDepth/3, maxDepth] の範囲の乱数です。
ファイルはリーフディレクトリにランダムに配置されます。各ファイルのサイズは、平均サイズが 1 ブロック、標準偏差が 1 のガウス分布に従います。
生成された名前空間構造は、出力ディレクトリ内の 2 つのファイルで記述されます。最初のファイルの各行には、リーフディレクトリのフルネームが含まれています。2 番目のファイルの各行には、ファイル名とサイズが空白で区切られて含まれています。
コマンドの概要は次のとおりです。
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
シード
乱数ジェネレーターのシード。デフォルトは現在の時間です。
このツールは、入力ディレクトリからディレクトリ構造とファイル構造を読み取り、Hadoop 分散ファイルシステムに名前空間を作成します。すべてのファイルはバイト 'a' で埋められます。
コマンドの概要は次のとおりです。
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNdataGenerator [options]
オプションには以下が含まれます。
-inDir
inDir
ディレクトリ/ファイル構造が格納されている入力ディレクトリ名。デフォルトは現在のディレクトリです。
-root
テストスペースのルート
新しい名前空間が配置されるルートディレクトリの名前。デフォルトは “/testLoadSpace” です。