このページでは、Hadoop が提供するツールを使用して Hadoop のベンチマークテストを行う方法について説明します。
NNThroughputBenchmark は、その名前が示すように、ネームノードスループットベンチマークです。これは、単一ノード上で一連のクライアントスレッドをネームノードに対して実行します。ネームノードが設定されていない場合、最初に同じプロセス内でネームノードを起動します(スタンドアロンモード)。この場合、各クライアントはそれぞれのネームノードメソッドを直接呼び出すことによって、同じ操作を繰り返し実行します。そうでない場合、ベンチマークはクライアントプロトコル RPC を介してリモートネームノードに対して操作を実行します(リモートモード)。いずれの場合も、すべてのクライアントは異なるノード間でリモートに実行されるのではなく、単一のプロセス内でローカルに実行されます。これは、RPC 接続とシリアライズによる通信オーバーヘッドを回避し、純粋なネームノードパフォーマンスの上限を明らかにするためです。
ベンチマークは最初に各スレッドの入力を生成するため、入力生成のオーバーヘッドが結果の統計に影響を与えません。スレッドによって実行される操作の数は実質的に同じです。正確には、任意の 2 つのスレッドによって実行される操作の数の差は 1 を超えません。次に、ベンチマークは指定された数のスレッドを使用して指定された数の操作を実行し、ネームノードによって 1 秒あたりに実行される操作の数を測定することによって結果の統計を出力します。
一般的なコマンドライン構文は次のとおりです。
hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark [汎用オプション] [コマンドオプション]
このベンチマークは、Hadoop コマンドライン汎用オプション を使用して動作を変更できます。ベンチマークは、他のツールと同様に、-fs
コマンドオプションでオーバーライド可能な fs.defaultFS
設定に依存して、スタンドアロンモードまたはリモートモードで実行されます。 fs.defaultFS
スキームが指定されていないか、file
(ローカル)の場合、ベンチマークはスタンドアロンモードで実行されます。特に、リモートネームノード設定 dfs.namenode.fs-limits.min-block-size
は 16 に設定する必要があります。一方、スタンドアロンモードでは、ベンチマークは内部ネームノードの最小ブロックサイズ検証をオフにします。
以下は、サポートされているすべてのコマンドオプションです。
コマンドオプション | 説明 |
---|---|
-op |
操作を指定します。このオプションは必須であり、最初のオプションである必要があります。 |
-logLevel |
ベンチマークの実行時のログレベルを指定します。デフォルトのログレベルは ERROR です。 |
-UGCacheRefreshCount |
指定された数の操作ごとに、ベンチマークはネームノードのユーザーグループキャッシュをパージします。デフォルトでは、更新は呼び出されません。 |
-keepResults |
指定された場合、実行後にネームスペースをクリーンアップしません。デフォルトでは、ネームスペースはテスト後に削除されます。 |
以下は、サポートされているすべての操作と、それぞれの操作固有のパラメータ(すべてオプション)とデフォルト値です。
操作オプション | 操作固有のパラメータ |
---|---|
すべて |
他の操作のオプション |
作成 |
[-threads 3 ] [-files 10 ] [-filesPerDir 4 ] [-close ] |
mkdirs |
[-threads 3 ] [-dirs 10 ] [-dirsPerDir 2 ] |
開く |
[-threads 3 ] [-files 10 ] [-filesPerDir 4 ] [-useExisting ] |
削除 |
[-threads 3 ] [-files 10 ] [-filesPerDir 4 ] [-useExisting ] |
fileStatus |
[-threads 3 ] [-files 10 ] [-filesPerDir 4 ] [-useExisting ] |
名前変更 |
[-threads 3 ] [-files 10 ] [-filesPerDir 4 ] [-useExisting ] |
blockReport |
[-datanodes 10 ] [-reports 30 ] [-blocksPerReport 100 ] [-blocksPerFile 10 ] |
レプリケーション |
[-datanodes 10 ] [-nodesToDecommission 1 ] [-nodeReplicationLimit 100 ] [-totalBlocks 100 ] [-replication 3 ] |
クリーン |
該当なし |
上記の操作を使用してベンチマークを実行する場合は、以下に示す操作固有のパラメータを指定してください。
操作固有オプション | 説明 |
---|---|
-threads |
それぞれの操作を実行するスレッドの総数。 |
-files |
それぞれの操作のファイルの総数。 |
-dirs |
それぞれの操作のディレクトリの総数。 |
-filesPerDir |
ディレクトリあたりのファイル数。 |
-close |
作成後にファイルを閉じます。 |
-dirsPerDir |
ディレクトリあたりのディレクトリ数。 |
-useExisting |
指定された場合、ネームスペースを再作成せず、既存のデータを使用します。 |
-datanodes |
シミュレートされたデータノードの総数。 |
-reports |
送信するブロックレポートの総数。 |
-blocksPerReport |
レポートあたりのブロック数。 |
-blocksPerFile |
ファイルあたりのブロック数。 |
-nodesToDecommission |
デコミッションするシミュレートされたデータノードの総数。 |
-nodeReplicationLimit |
データノードの送信レプリケーションストリームの最大数。 |
-totalBlocks |
操作するブロックの総数。 |
-replication |
レプリケーション係数。データノードの数より大きい場合は、それに調整されます。 |
ベンチマークは、ネームノードによって 1 秒あたりに実行される操作の数を測定します。具体的には、テストされた各操作について、合計実行時間(秒)(経過時間)、操作スループット(1 秒あたりの操作数)、および操作の平均時間(平均時間)を報告します。値が高いほど良好です。
以下は、リモートネームノードに対して 1K スレッドで 100K ファイルを開く次のコマンドを実行することによるサンプルレポートです。実際のベンチマーク統計については、HDFS のスケーラビリティ: 成長の限界 を参照してください。
$ hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs hdfs://nameservice:9000 -op open -threads 1000 -files 100000 --- open inputs --- nrFiles = 100000 nrThreads = 1000 nrFilesPerDir = 4 --- open stats --- # operations: 100000 Elapsed Time: 9510 Ops per sec: 10515.247108307045 Average Time: 90