Hadoop ベンチマーク

このページでは、Hadoop が提供するツールを使用して Hadoop のベンチマークテストを行う方法について説明します。

NNThroughputBenchmark

概要

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