ablog

不器用で落着きのない技術者のメモ

YCSB で DynamoDB On-Demand に負荷をかける

YCSB(Yahoo Cloud Serving Benchmark)で DynamoDB On-Demand に負荷をかける手順。

準備

DynamoDBにテーブルを作成する
  • テーブル名: ycsb1、ycsb2、ycsb3、ycsb10、ycsb100、ycsb1000、ycsb10000
  • プライマリパーティションキー:firstname(文字列)
  • 読み込み/書き込みキャパシティーモード: オンデマンド
Maven のインストール
  • OpenJDK をインストールする。
$ sudo yum -y install java-1.8.0-openjdk-devel.x86_64
  • Maven をインストールする。
$ curl -OL https://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
$ tar xzvf apache-maven-3.5.2-bin.tar.gz
$ sudo mv apache-maven-3.5.2 /opt/
$ sudo ln -s /opt/apache-maven-3.5.2 /opt/apache-maven
  • .bash_profile に追記して Maven へのパスを通す。
$ vi .bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/apache-maven/bin
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.amzn2.x86_64
export JAVA_HOME
$ source .bash_profile
  • Maven のバージョンを確認する。
$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /opt/apache-maven
Java version: 1.7.0_201, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.201.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.14.77-70.59.amzn1.x86_64", arch: "amd64", family: "unix"
YCSBのインストールと設定
  • YCSBのダウンロードとビルド
$ sudo yum -y install git
$ git clone https://github.com/brianfrankcooper/YCSB.git
$ cd YCSB/
$ mvn clean package
  • DynamoDBの接続設定
$ vi ~/YCSB/dynamodb/conf/dynamodb.properties
dynamodb.awsCredentialsFile = dynamodb/conf/AWSCredentials.properties
dynamodb.primaryKey = firstname
dynamodb.endpoint = http://dynamodb.ap-northeast-1.amazonaws.com
  • クレデンシャルを設定する。
$ vi ~/YCSB/dynamodb/conf/AWSCredentials.properties
accessKey = <記述する>
secretKey = <記述する>
  • YCSB/workloads/workload1 を作成する。
$ cp workloada workload1
$ vi workload1
recordcount=1
table=ycsb1
operationcount=10000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=1
updateproportion=0
scanproportion=0
insertproportion=0

ベンチマークをかける

  • データをロードする。
$ cd ~/YCSB
$ ./bin/ycsb load dynamodb -P workloads/workload1 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload2 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload3 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload10 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload100 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload1000 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload10000 -P dynamodb/conf/dynamodb.properties
$ ./bin/ycsb load dynamodb -P workloads/workload100hotspot -P dynamodb/conf/dynamodb.properties
  • 負荷をかける。
$ ./bin/ycsb run dynamodb -P workloads/workload1 -P dynamodb/conf/dynamodb.properties -threads 50
$ ./bin/ycsb run dynamodb -P workloads/workload2 -P dynamodb/conf/dynamodb.properties -threads 100
$ ./bin/ycsb run dynamodb -P workloads/workload3 -P dynamodb/conf/dynamodb.properties -threads 150
$ ./bin/ycsb run dynamodb -P workloads/workload10 -P dynamodb/conf/dynamodb.properties -threads 200
$ ./bin/ycsb run dynamodb -P workloads/workload100 -P dynamodb/conf/dynamodb.properties -threads 300
$ ./bin/ycsb run dynamodb -P workloads/workload1000 -P dynamodb/conf/dynamodb.properties -threads 400
$ ./bin/ycsb run dynamodb -P workloads/workload10000 -P dynamodb/conf/dynamodb.properties -threads 500
$ ./bin/ycsb run dynamodb -P workloads/workload100hotspot -P dynamodb/conf/dynamodb.properties -threads 200

確認ポイント

補足

  • YCSB/dynamodb/conf/dynamodb.properties
dynamodb.consistentReads = true
dynamodb.awsCredentialsFile = dynamodb/conf/AWSCredentials.properties
dynamodb.primaryKey = firstname
dynamodb.endpoint = http://dynamodb.ap-northeast-1.amazonaws.com
  • YCSB/workloads/workload1
recordcount=1
table=ycsb1
operationcount=10000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=1
updateproportion=0
scanproportion=0
insertproportion=0
  • YCSB/workloads/workload2
recordcount=2
table=ycsb2
以降、workload1 と同じ
  • YCSB/workloads/workload3
recordcount=3
table=ycsb3
以降、workload1 と同じ
  • YCSB/workloads/workload10
recordcount=10
table=ycsb10
以降、workload1 と同じ
  • YCSB/workloads/workload100
recordcount=100
table=ycsb100
以降、workload1 と同じ
  • YCSB/workloads/workload100hotspot
recordcount=100
table=ycsb100
requestdistribution=hotspot
以降、workload1 と同じ
  • YCSB/workloads/workload1000
recordcount=1000
table=ycsb1000
以降、workload1 と同じ