本記事では、YCSBツールを使用してOBKV-HBaseの性能テストを実行する方法について説明します。
環境の準備
OBKVインスタンスを購入し、デプロイメントプランは単一リージョンデプロイメント、ノード仕様は8コア32GB、フル機能レプリカノード数は2に設定します。
注意
Standard Edition (Key-Value)は現在、ホワイトリストユーザーのみが利用できます。このシリーズをご希望の場合は、OceanBaseテクニカルサポートまでお問い合わせください。
インスタンス作成後、インスタンス一覧から該当するインスタンス名を選択してインスタンス管理ページに移動し、左側のナビゲーションバーから テナント を選択します。その後、テナントを作成 をクリックして、パフォーマンステスト用の新規テナントを作成します。テナント仕様は8c32gに設定します。
テナント作成後、テナント管理ページで新規作成したテナントを選択し、テナントダッシュボードに移動します。ここで、アカウントを作成 をクリックして、テストユーザーを作成します。
テーブルの作成
テナントダッシュボードページで、データベースにログイン をクリックし、新規作成したテストユーザーを選択して、作成したOceanBaseデータベースインスタンスに接続します。以下のテーブル作成ステートメントを実行してテーブルを作成します。
CREATE TABLE test$family (
K varbinary(1024) NOT NULL,
Q varbinary(256) NOT NULL,
T bigint(20) NOT NULL,
V varbinary(1024) DEFAULT NULL,
PRIMARY KEY (K, Q, T))
block_size=8192 partition by key(K) partitions 100;
YCSB OBKVクライアントの準備
サーバー側のテスト環境の準備が完了した後、パフォーマンステストのクライアントとして、別途8c16GBのECSを購入する必要があります。クライアントとサーバーは同一のVPCネットワーク下に配置する必要があります。購入後、データベースのインスタンス管理ページで、このクライアントのIPアドレスを「セキュリティ設定」のホワイトリストに追加する必要があります。本記事の以降の操作はすべて、パフォーマンステストクライアント上で行います。
テスト中は以下のコマンドを使用する必要があります。環境内でこれらのコマンドを実行できるようにしておいてください。
- git:sudo yum install git
- mvn:sudo yum install maven
- java: sudo yum install java
core-0.12.0.jarをコンパイルします。
YCSBソースコードをダウンロードし、以下のコマンドでブランチを0.12.0に切り替えます。
[wieck@localhost ~] $ git clone https://github.com/brianfrankcooper/YCSB.git [wieck@localhost ~] $ cd YCSB [wieck@localhost YCSB] $ git checkout 0.12.0以下のコマンドを実行してjarパッケージをコンパイルし取得します。実行後、必要なcore-0.12.0.jarが
YCSB/core/target/ディレクトリに配置されます。[wieck@localhost YCSB] $ mvn -pl com.yahoo.ycsb:core -am clean package -Dmaven.test.skip=trueYCSB core依存関係を追加します。
obkv-hbase-client-java のソースコードをダウンロードし、core-0.12.0.jar を obkv-hbase-client-java プロジェクトのルートディレクトリに配置します。また、pom.xml ファイルを修正し、com.yahoo.ycsb 依存関係を追加します。
[wieck@localhost ~] $ git clone https://github.com/oceanbase/obkv-hbase-client-java.git [wieck@localhost ~] $ cp xx/YCSB/core/target/core-0.12.0.jar xx/obkv-hbase-client-java[wieck@localhost ~] $ cd obkv-hbase-client-java [wieck@localhost obkv-hbase-client-java] $ vim pom.xml // ... <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.yahoo.ycsb</groupId> <artifactId>core</artifactId> <version>0.12.0</version> <scope>system</scope> <systemPath>${project.basedir}/core-0.12.0.jar</systemPath> </dependency> </dependencies>OBKV YCSB クライアントを作成します。
このステップでは主に YCSB の各メソッドを実装する必要があります。YcsbBench.java は既に記述されているサンプルです。ここでは、YcsbBench.java を obkv-hbase-client-java プロジェクトの
src/main/java/com/alipay/oceanbase/hbase/util/ディレクトリに配置します。[wieck@localhost ~] $ cd /obkv-hbase-client-java/src/main/java/com/alipay/oceanbase/hbase/util/ [wieck@localhost util] $ vim YcsbBench.javaOBKV YCSB クライアントの JAR パッケージをパッケージ化します。
OBKV YCSB クライアントのルートディレクトリでパッケージ化コマンドを実行します。パッケージ化完了後、target ディレクトリに必要な JAR パッケージ obkv-hbase-client-0.1.x-SNAPSHOT-jar-with-dependencies.jar (0.1.x は実際のバージョン番号) が生成されます。以降、この JAR パッケージを使用して YCSB テストを実行します。
[wieck@localhost obkv-hbase-client-java] $ mvn assembly:assembly -Dmaven.test.skip=true
YCSBテストスクリプトの修正
上記の手順で、YCSBソースコードをダウンロードし、0.12.0ブランチに切り替えました。次に、YCSBのソースコードを修正して、YCSBがクライアントを認識できるようにします。
YCSBスクリプトを修正します。
ycsbファイルを修正し、OBKV-HBaseのクライアントパスを追加します。
[wieck@localhost YCSB] $ cd bin/ [wieck@localhost YCSB] $ vim ycsb // ... "tarantool" : "com.yahoo.ycsb.db.TarantoolClient", "voldemort" : "com.yahoo.ycsb.db.VoldemortClient", "ob-hbase" : "com.alipay.oceanbase.hbase.util.YcsbBench", }YCSBの依存関係を設定します。
ルートディレクトリに
ob-binding/lib/フォルダを作成し、クライアントを配置します。構造は以下のとおりです。[wieck@localhost YCSB] $ mkdir -p ob-binding/lib/ [wieck@localhost YCSB] $ cd ob-binding/lib/ [wieck@localhost lib] $ cp obkv-hbase-client-java/target/obkv-hbase-client-0.1.5-SNAPSHOT-jar-with-dependencies.jar ./YCSBのルートディレクトリに戻り、ルートディレクトリ内の
pom.xmlファイルをpom.xml.backupに名前変更します。[wieck@localhost YCSB] $ mv pom.xml pom.xml.backupYCSBのルートディレクトリに
libフォルダを作成し、上記でパッケージ化したcore-0.12.0.jarをルートディレクトリのlibフォルダに配置します。同時に、libフォルダでコマンドを実行して関連パッケージをダウンロードします。[wieck@localhost YCSB] $ mkdir lib [wieck@localhost YCSB] $ cd lib/ [wieck@localhost lib] $ cp /xx/YCSB/core/target/core-0.12.0.jar ./ [wieck@localhost lib] $ wget https://repo1.maven.org/maven2/org/apache/htrace/htrace-core4/4.1.0-incubating/htrace-core4-4.1.0-incubating.jar [wieck@localhost lib] $ wget https://repo1.maven.org/maven2/org/hdrhistogram/HdrHistogram/2.1.4/HdrHistogram-2.1.4.jarこの時点で
YCSB/libディレクトリ内のファイル構造を確認します。[wieck@localhost lib] $ ls YCSB/lib/core-0.12.0.jar YCSB/lib/htrace-core4-4.1.0-incubating.jar YCSB/lib/HdrHistogram-2.1.4.jar
パラメータ説明
OBKV-HBaseパラメータ説明
テストを実行する前に、OBKV-HBaseクライアントの関連パラメータについて理解しておく必要があります。
// 直接接続モードを使用する場合: "hbase.oceanbase.paramURL" -> config URL "hbase.oceanbase.fullUserName" -> full user name like userName@tenantName#clusterName "hbase.oceanbase.password" -> password of user "hbase.oceanbase.sysUserName" -> SYS Tenant user name "hbase.oceanbase.sysPassword" -> password of sys user // ODPを使用する場合: "hbase.oceanbase.odpMode" -> whether to use ODP "hbase.oceanbase.odpAddr" -> ip addr of ODP "hbase.oceanbase.odpPort" -> port of ODP "hbase.oceanbase.fullUserName" -> full user name like userName@tenantName#clusterName "hbase.oceanbase.password" -> password of user "hbase.oceanbase.database" -> database name詳細なパラメータについては、com.alipay.oceanbase.hbase.constants をご参照ください。これらのパラメータは、対応するOceanBase Serverへの接続に使用されるだけでなく、クライアントのパフォーマンスに関するパラメータも制御します。
YCSBワークロードパラメータ説明
ワークロードの設定はYCSBテストツールに組み込まれています。ワークロードの詳細については YCSB core-workload をご参照ください。公式サイトのワークロードを実行するか、ワークロード内の設定をカスタマイズして変更できます。また、
-pオプションを使用してコマンドラインからパラメータを渡すことで、実行する操作や操作するデータ量などを柔軟に指定することもできます。ワークロードパラメータのうち、requestdistributionはサーバー側のリソース利用率に影響します。テストデータの分布をより均一にするため、uniformに設定することを推奨します。
YCSBテストの実行
テストスクリプトはYCSBフォルダ内の YCSB/bin ディレクトリにあります。テストパラメータモデルを設定後、テスト実行コマンドを使用してテストを開始できます。スクリプトの詳細については Running-a-Workload をご参照ください。
注意
パブリッククラウド上のクラスタの場合、対応するインスタンスを選択した後、左側のナビゲーションバーにあるデータベースエージェントをクリックすると、対応するODPのノード情報を確認できます。hbase.oceanbase.fullUserNameに対応するユーザー名には $userName を入力するだけで済み、テナント名やクラスタ名は入力不要です。
プット操作の性能をテストします。1つのoperationは10件のレコードに対応し、挿入完了後のテーブルには3億件のレコードが存在します。
テストコマンドは以下のとおりです:
./bin/ycsb run ob-hbase -P workloads/workloada -s -threads $thread_num -p hbase.oceanbase.odpMode=true -p hbase.oceanbase.odpAddr="$odp_address" -p hbase.oceanbase.odpPort=$odp_port \ -p hbase.oceanbase.fullUserName="$userName" -p hbase.oceanbase.password="$password" \ -p hbase.oceanbase.database="$database" -p hbase.oceanbase.table="test" -p hbase.oceanbase.columnFamily="family" \ -p insertproportion=1 -p readproportion=0 -p updateproportion=0 -p requestdistribution=uniform \ -p recordcount=30000000 -p operationcount=30000000 -p server.connection.pool.size=$pool_sizeリード操作のパフォーマンスをテストする
従来のYCSBテストでは、リード性能をテストする際には、まずデータをロードしてからリード操作を実行する必要があります。データのロードを繰り返す手間を省くために、insertcountとinsertstartを指定することで、プットフェーズで挿入されたデータを再利用できます。また、データインポート完了後は、
ALTER SYSTEM major freeze tenant=<your tenant name>を実行してデータをメジャーコンパクションした上で、関連するパフォーマンステストを行う必要があります。テストコマンドは以下のとおりです:
./bin/ycsb run ob-hbase -P workloads/workloadc -s -threads $thread_num -p hbase.oceanbase.odpMode=true -p hbase.oceanbase.odpAddr="$odp_address" -p hbase.oceanbase.odpPort=$odp_port \ -p hbase.oceanbase.fullUserName="$userName" -p hbase.oceanbase.password="$password" \ -p hbase.oceanbase.database="$database" -p hbase.oceanbase.table="test" -p hbase.oceanbase.columnFamily="family" \ -p recordcount=60000000 -p operationcount=30000000 -p insertcount=30000000 -p insertstart=30000000 \ -p requestdistribution=uniform -p server.connection.pool.size=$pool_size