HBase でベンチマークを実行する
Yahoo! Cloud Serving Benchmark (YCSB) は、NoSQL データベース管理システムの相対的なパフォーマンスを評価するための、オープンソースの仕様とプログラムのスイートです。 この演習では、2 つの HBase クラスター (一方は高速書き込み機能を使用している) のパフォーマンスに対してベンチマークを実行します。 2 つのオプションのパフォーマンスの違いを理解することが目的です。 演習の前提条件
演習の手順を実行する場合は、以下のものがあることを確認してください。
- HDInsight HBase クラスターを作成するための承認がある Azure サブスクリプション。
- Putty (Windows) や Terminal (Mac book) などの SSH クライアントへのアクセス
Azure 管理ポータルで HDInsight HBase クラスターをプロビジョニングする
Azure 管理ポータルの新しいエクスペリエンスで HDInsight HBase をプロビジョニングするには、次の手順のようにします。
Azure ポータルにアクセスします。 自分の Azure アカウントの資格情報を使用してログインします。
最初に、Premium ブロック BLOB ストレージ アカウントを作成します。 [新規] ページで、[ストレージ アカウント] をクリックします。
[ストレージ アカウントの作成] ページで、以下のフィールドを設定します
[サブスクリプション]: サブスクリプションの詳細が自動的に設定されているはずです
[リソース グループ]: HDInsight HBase のデプロイを保持するためのリソース グループを入力します
[ストレージ アカウント名]: Premium クラスターで使用するストレージ アカウントの名前を入力します。
[リージョン]: デプロイのリージョンの名前を入力します (クラスターとストレージ アカウントが同じリージョンにあることを確認します)
[パフォーマンス]: Premium
[アカウントの種類]: BlockBlobStorage
[レプリケーション]: ローカル冗長ストレージ (LRS)
[クラスター ログイン ユーザー名]: クラスター管理者のユーザー名を入力します (既定: admin)
その他のすべてのタブは既定のままにし、[確認および作成] をクリックしてストレージ アカウントを作成します。
ストレージ アカウントが作成されたら、左側の [アクセス キー] をクリックして、key1 をコピーします。 後でクラスターを作成するときにこれを使用します。
高速書き込みを使用して HDInsight HBase クラスターのデプロイを開始します。 [リソースの作成] -> [分析] -> [HDInsight] を選択します
[基本] タブで、HBase クラスターを作成するために次のフィールドを入力します。
[サブスクリプション]: サブスクリプションの詳細が自動的に設定されているはずです
[リソース グループ]: HDInsight HBase のデプロイを保持するためのリソース グループを入力します
[クラスター名]: クラスターの名前を入力します。 クラスター名を使用できる場合は、緑色のティックが表示されます。
[リージョン]: デプロイのリージョンの名前を入力します
[クラスターの種類]: クラスターの種類 - HBase。 バージョン - HBase 2.0.0 (HDI 4.0)
[クラスター ログイン ユーザー名]: クラスター管理者のユーザー名を入力します (既定: admin)
[クラスター ログイン パスワード]: クラスター ログインのパスワードを入力します (既定値: sshuser)
[クラスター ログイン パスワードを確認する]: 最後のステップで入力したパスワードを確認します
[Secure Shell (SSH) ユーザー名]: SSH ログイン ユーザーを入力します (既定値: sshuser)
[SSH のクラスター ログイン パスワードを使用する]: SSH ログインと Ambari ログインなどの両方に同じパスワードを使用するには、このチェック ボックスをオンにします。
[次へ: ストレージ] をクリックして [ストレージ] タブを起動し、以下のフィールドを入力します
[プライマリ ストレージの種類]: Azure Storage。
[メソッドの選択]: [アクセス キーを使用] ラジオ ボタンを選択します
[ストレージ アカウント名]: 前に作成した Premium ブロック BLOB ストレージ アカウントの名前を入力します
[アクセス キー]: 前にコピーした key1 アクセス キーを入力します
[コンテナー]: HDInsight から既定のコンテナー名が提案されているはずです。 これを選択することも、独自の名前を作成することもできます。
残りのオプションはそのままにして下にスクロールし、[HBase 高速書き込みを有効にする] チェック ボックスをオンにします。(後で 2 番目のクラスターを作成するときは、同じ手順を使用しますが、このチェック ボックスをオフにして高速書き込みを有効にしないことに注意してください。)
[セキュリティとネットワーク] ブレードは変更しないで既定の設定のままにして、[構成と価格] タブに移動します。
[構成と価格] タブで、[ノード構成] セクションに、[Premium disks per worker node](ワーカー ノードごとの Premium ディスク) という項目の行があることに注意してください。
[Region node](リージョン ノード) で 10 を選択し、[ノード サイズ] で DS14v2 を選択します (これより小さい VM 数と小さい VM SKU を選択することもできますが、両方のクラスターのノード数と VM SKU が同じになるようにしてください)
[次へ: 確認と作成] をクリックします
[確認と作成] タブで、[ストレージ] セクションの [HBase 高速書き込み] が有効になっていることを確認します。
[作成] をクリックして、高速書き込みが有効になっている最初のクラスターのデプロイを開始します。
同じ手順を繰り返して、2 つ目の HDInsight HBase クラスターを作成しますが、今度は高速書き込みを有効にしません。 次の変更点に注意してください
既定で推奨される通常の BLOB ストレージ アカウントを使用します
[ストレージ] タブの [Enable Accelerated Writes](高速書き込みを有効にする) チェック ボックスはオフのままにします。
このクラスターの [構成と価格] タブでは、[ノード構成] セクションに [Premium disks per worker node](ワーカー ノードごとの Premium ディスク) という項目の行がないことに注意してください。
[Region node](リージョン ノード) で 10 を選択し、[ノード サイズ] で D14v2 を選択します。(また、前のような DS シリーズの VM の種類がないことにも注意してください)。 (これより小さい VM 数と小さい VM SKU を選択することもできますが、両方のクラスターのノード数と VM SKU が同じになるようにしてください)
[作成] をクリックして、高速書き込みが有効になっていない 2 番目のクラスターのデプロイを開始します。
クラスターのデプロイが完了したので、次のセクションでは、これらのクラスターの両方で YCSB テストを設定して実行します。
YCSB テストの実行
HDInsight シェルにログインします
YCSB テストを設定して実行する手順は、どちらのクラスターでも同じです。
Azure portal のクラスターのページで、[SSH + Cluster log in](SSH とクラスター ログイン) に移動し、ホスト名と SSH パスを使用してクラスターに SSH で接続します。 パスは次の形式にする必要があります。
ssh <sshuser>@<clustername>.azurehdinsight.net
テーブルを作成します
次の手順を実行して、データセットの読み込みに使用する HBase テーブルを作成します
HBase シェルを起動し、テーブル分割の数のパラメーターを設定します。 テーブル分割を設定します (10 * リージョン サーバーの数)
テストの実行に使用する HBase テーブルを作成します
HBase シェルを終了します
hbase(main):018:0> n_splits = 100 hbase(main):019:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}} hbase(main):020:0> exit
YSCB リポジトリをダウンロードします
次の場所から YCSB リポジトリをダウンロードします
$ curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
フォルダーを解凍して内容にアクセスします
$ tar xfvz ycsb-0.17.0.tar.gz
これにより、ycsb-0.17.0 フォルダーが作成されます。 このフォルダーに移動します
両方のクラスターで、書き込み負荷の高いワークロードを実行します
次のコマンドとパラメーターを使用して、書き込み負荷の高いワークロードを開始します
workloads/workloada: 追加の workload/workloada を実行する必要があることを示します
table: 前に作成した HBase テーブルの名前を指定します
columnfamily: 作成したテーブルの HBase 列ファミリ名の値を指定します
recordcount: 挿入するレコードの数 (100 万を使用します)
threadcount: スレッドの数 (これは変更できますが、実験間で一定に保つ必要があります)
-cp /etc/hbase/conf: HBase 構成設定へのポインター
-s | tee -a: 出力を書き込むファイル名を指定します。
bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat
書き込み負荷の高いワークロードを実行し、前に作成した HBase テーブルに 100 万行を読み込みます。
注意
コマンドを送信した後に表示される警告は無視します。
高速書き込みが有効な HDInsight HBase の結果の例
次のコマンドを実行します。
```CMD $ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat ```
結果を確認します。
```CMD 2020-01-10 16:21:40:213 10 sec: 15451 operations; 1545.1 current ops/sec; est completion in 10 minutes [INSERT: Count=15452, Max=120319, Min=1249, Avg=2312.21, 90=2625, 99=7915, 99.9=19551, 99.99=113855] 2020-01-10 16:21:50:213 20 sec: 34012 operations; 1856.1 current ops/sec; est completion in 9 minutes [INSERT: Count=18560, Max=305663, Min=1230, Avg=2146.57, 90=2341, 99=5975, 99.9=11151, 99.99=296703] .... 2020-01-10 16:30:10:213 520 sec: 972048 operations; 1866.7 current ops/sec; est completion in 15 seconds [INSERT: Count=18667, Max=91199, Min=1209, Avg=2140.52, 90=2469, 99=7091, 99.9=22591, 99.99=66239] 2020-01-10 16:30:20:214 530 sec: 988005 operations; 1595.7 current ops/sec; est completion in 7 second [INSERT: Count=15957, Max=38847, Min=1257, Avg=2502.91, 90=3707, 99=8303, 99.9=21711, 99.99=38015] ... ... 2020-01-11 00:22:06:192 564 sec: 1000000 operations; 1792.97 current ops/sec; [CLEANUP: Count=8, Max=80447, Min=5, Avg=10105.12, 90=268, 99=80447, 99.9=80447, 99.99=80447] [INSERT: Count=8512, Max=16639, Min=1200, Avg=2042.62, 90=2323, 99=6743, 99.9=11487, 99.99=16495] [OVERALL], RunTime(ms), 564748 [OVERALL], Throughput(ops/sec), 1770.7012685303887 [TOTAL_GCS_PS_Scavenge], Count, 871 [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3116 [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5517505152740692 [TOTAL_GCS_PS_MarkSweep], Count, 0 [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0 [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 [TOTAL_GCs], Count, 871 [TOTAL_GC_TIME], Time(ms), 3116 [TOTAL_GC_TIME_%], Time(%), 0.5517505152740692 [CLEANUP], Operations, 8 [CLEANUP], AverageLatency(us), 10105.125 [CLEANUP], MinLatency(us), 5 [CLEANUP], MaxLatency(us), 80447 [CLEANUP], 95thPercentileLatency(us), 80447 [CLEANUP], 99thPercentileLatency(us), 80447 [INSERT], Operations, 1000000 [INSERT], AverageLatency(us), 2248.752362 [INSERT], MinLatency(us), 1120 [INSERT], MaxLatency(us), 498687 [INSERT], 95thPercentileLatency(us), 3623 [INSERT], 99thPercentileLatency(us), 7375 [INSERT], Return=OK, 1000000 ```
テストの結果を調べます。 上記の結果からの観察例を次に示します。
- テストの実行に 538663 ミリ秒 (8.97 分) かかりました
- "Return=OK, 1000000" は、100 万件の入力すべてが正常に書き込まれたことを示します **
- 書き込みスループットは、1 秒あたり 1856 操作でした
- 挿入の 95% の待機時間は 3389 ミリ秒でした
- 少数の挿入にはさらに時間がかかりました。ワークロードが多いためにリージョン サーバーによってブロックされた可能性があります
高速書き込みが有効ではない HDInsight HBase の結果の例
次のコマンドを実行します。
$ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat
結果を確認します。
2020-01-10 23:58:20:475 2574 sec: 1000000 operations; 333.72 current ops/sec; [CLEANUP: Count=8, Max=79679, Min=4, Avg=9996.38, 90=239, 99=79679, 99.9 =79679, 99.99=79679] [INSERT: Count=1426, Max=39839, Min=6136, Avg=9289.47, 90=13071, 99=27535, 99.9=38655, 99.99=39839] [OVERALL], RunTime(ms), 2574273 [OVERALL], Throughput(ops/sec), 388.45918828344935 [TOTAL_GCS_PS_Scavenge], Count, 908 [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3208 [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.12461770760133055 [TOTAL_GCS_PS_MarkSweep], Count, 0 [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0 [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 [TOTAL_GCs], Count, 908 [TOTAL_GC_TIME], Time(ms), 3208 [TOTAL_GC_TIME_%], Time(%), 0.12461770760133055 [CLEANUP], Operations, 8 [CLEANUP], AverageLatency(us), 9996.375 [CLEANUP], MinLatency(us), 4 [CLEANUP], MaxLatency(us), 79679 [CLEANUP], 95thPercentileLatency(us), 79679 [CLEANUP], 99thPercentileLatency(us), 79679 [INSERT], Operations, 1000000 [INSERT], AverageLatency(us), 10285.497832 [INSERT], MinLatency(us), 5568 [INSERT], MaxLatency(us), 1307647 [INSERT], 95thPercentileLatency(us), 18751 [INSERT], 99thPercentileLatency(us), 33759 [INSERT], Return=OK, 1000000
結果を比較します。
パラメーター ユニット 高速書き込みあり 高速書き込みなし [OVERALL], RunTime(ms) ミリ秒 567478 2574273 [OVERALL], Throughput(ops/sec) 処理/秒 1770 388 [INSERT], Operations 操作の数 1000000 1000000 [INSERT], 95thPercentileLatency(us) マイクロ秒 3623 18751 [INSERT], 99thPercentileLatency(us) マイクロ秒 7375 33759 [INSERT], Return=OK レコードの数 1000000 1000000 比較できる観察の例をいくつか示します。
- [OVERALL], RunTime(ms): 合計実行時間 (ミリ秒)
- [OVERALL], Throughput(ops/sec): すべてのスレッドでの操作数/秒
- [INSERT], Operations: 挿入操作の合計数。その下には、関連する平均、最小、最大、95 および 99 パーセンタイルの待機時間が示されています
- [INSERT], 95thPercentileLatency(us): 挿入操作の 95% は、この値より下にデータ ポイントがあります
- [INSERT], 99thPercentileLatency(us): 挿入操作の 99% は、この値より下にデータ ポイントがあります
- [INSERT], Return=OK: レコード OK は、後にある件数のすべての挿入操作が成功したことを示します
他の作業負荷の範囲を試して比較することを検討します。 たとえば、次のようになります。
ほとんどが読み取り (読み取り 95%、書き込み 5%): workloadb
bin/ycsb run hbase12 -P workloads/workloadb -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadb.dat
読み取りのみ (読み取り 100%、書き込み 0%): workloadc
bin/ycsb run hbase12 -P workloads/workloadc -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadc.dat