前置工作
針對大數(shù)據(jù)相關(guān)存儲進行壓測,本文以Hbase1.2.X版本為例進行描述:
獲取二進制文件
方式1:源碼下載git@github.com:brianfrankcooper/YCSB.git,針對源碼操作如下:
支持所有類型存儲:mvn clean package
僅支持單一存儲構(gòu)建:mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package
方式2:使用已編譯好的二進制文件,具體文件鏈接:https://github.com/brianfrankcooper/YCSB/releases/download/0.14.0/ycsb-0.14.0.tar.gz
設(shè)置Hbase集群相關(guān)配置
找到hbase版本hbase12對應(yīng)的ycsb客戶端hbase12-binding,創(chuàng)建conf目錄,將hbase 集群對應(yīng)的hbase-site.xml文件下載至該目錄;確??梢酝ㄟ^域名訪問hbase集群;在hbase集群中創(chuàng)建相關(guān)表(由于workload中指定數(shù)據(jù)源,所以創(chuàng)建的表需要對應(yīng)起來, 否則需要自定義數(shù)據(jù)生成器來進行測試-不推薦),ycsb不負責表的創(chuàng)建;
測試實施
數(shù)據(jù)裝載
./bin/ycsb.sh load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=100000000 -p operationcount=100000000 -threads 50 -srecordcount=100000000 總共的-P workloads/workloada 該項參數(shù)是必須的,但是其中的內(nèi)容可以被命令行中的-p參數(shù)覆蓋,各參數(shù)具體含義如下:
recordcount=100000000 總共的操作條數(shù) (load時)
operationcount=100000000 總共操作的次數(shù) (run時)
workload=com.yahoo.ycsb.workloads.CoreWorkload 數(shù)據(jù)生成器(默認usertable表)
readallfields=true 在讀取的時候,是否需要讀取所有字段
readproportion=0.5 讀操作占比
updateproportion=0.5 update操作占比scanproportion=0 scan操作占比
insertproportion=0 insert操作占比
requestdistribution=zipfian run時使用的分布
-s :每 10s 打印一次客戶端狀態(tài),用于調(diào)試;
-threads:客戶端線程數(shù),默認為 1;
-target:每秒的目標操作數(shù),默認為無限制(盡可能快地完成操作);
Linux環(huán)境:需要使用ycsb.sh 非ycsb;需要使用 -threads 非 -thread;table=usertable -p columnfamily=cf
workloada中參數(shù)說明,其中命令行中指定的參數(shù)值會覆蓋默認值
數(shù)據(jù)運行
./bin/ycsb.sh run hbase12 -P workloads/workloadd -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=1000000 -threads 1000 -s替換不同workload來進行測試,不同workload含義如下:
workloada:讀寫占比50:50;
workloadb:讀寫占比95:5;
workloadc:讀寫占比100:0;
workloadd:讀最近更新:
該workload 會插入新紀錄,越新讀取概率越大;
workloade:小范圍查詢:該 workload 會查詢小范圍紀錄非單個紀錄;
workloadf:讀取-修改-寫入:該workload 會讀取一個紀錄,然后修改該紀錄,最后寫回;
測試結(jié)果
結(jié)果參數(shù)說明:
RunTime(ms):運行總時間
Throughput(ops/sec):吞吐量,每秒操作數(shù)
[TOTAL_GCS_PS_Scavenge], Count:Parallel Scavenge 回收次數(shù)[TOTAL_GC_TIME_PS_Scavenge], Time(ms):Parallel Scavenge 回收時間[TOTAL_GC_TIME_%_PS_Scavenge], Time(%):Parallel Scavenge 回收時間百分比
[TOTAL_GCS_PS_MarkSweep], Count:PS MarkSweep 回收次數(shù)[TOTAL_GC_TIME_PS_MarkSweep], Time(ms):PS MarkSweep 回收時間[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%):PS MarkSweep 回收時間百分比
[TOTAL_GCs], Count:全局 GC 次數(shù)
[TOTAL_GC_TIME], Time(ms):全局 GC 時間
[TOTAL_GC_TIME_%], Time(%):全局 GC 時間百分比不同操作類型:READ\UPDATE\CLEANUP\SCAN等;
Operations :總操作數(shù)
Avg(us) :平均延遲(微秒)
Min(us):最小延遲
Max(us):最大延遲
95thPercentileLatency(us) 95%的樣本延遲低于該值
99thPercentileLatency(us) 99%的樣本延遲低于該值
Return=OK, 50011 結(jié)果(正確),總操作數(shù)(50011)
備注
YCSB 的延遲為端到端的延遲,在開始調(diào)用數(shù)據(jù)庫接口層方法前開始計時,在方法返回時結(jié)束計時,延遲包括這幾個部分:在接口層內(nèi)代碼的運行時間+客戶端到數(shù)據(jù)庫服務(wù)器的網(wǎng)絡(luò)延遲+數(shù)據(jù)庫的執(zhí)行時間;不包括由-target節(jié)流參數(shù)引入的延遲
附加網(wǎng)址:
http://wiki.github.com/brianfrankcooper/YCSB/
https://labs.yahoo.com/news/yahoo-cloud-serving-benchmark/