自帶有hbase pe,但是pe只能統計每個線程執行的情況,不能統計整體的狀態。所以還是推薦使用YCSB
https://github.com/brianfrankcooper/YCSB
使用參考文檔:
https://github.com/brianfrankcooper/YCSB/wiki
一:首先確認集群配置,比如cpu、內存、磁盤、網絡帶寬
二:創建hbase表,設置表重要屬性,比如使用哪種壓縮,哪種塊編碼等等。一般也會創建好預分區,在創建預分區的時候,由於YCSB默認生成的rowkey是以“user”開頭的,所以創建預分區應做對應調整,比如:
create 'ycsb01',{NAME => 'f1',COMPRESSION => 'SNAPPY'},SPLITS => ['user1','user2','user3','user4','user5','user6','user7','user8','user9']
三:定義我們的workload,YCSB自帶的也有幾種workload,可以參照來定義我們自己的負載情況,
比較核心的配置如下:
recordcount: YCSB load命令的參數,指總數據條數 (default: 1000) Operationcount: YCSB run(運行壓力測試)命令的參數,默認值1000表示默認選取數據庫中的1000條數據進行壓力測試。對於workloada這種測試場景,就意味着讀數據在500左右,寫數據也在500左右 fieldcount: 字段個數 (default: 10) fieldlength: 每個字段的長度 (default: 100) minfieldlength: 每個字段最小的長度 (default: 1) readallfields: 是否讀取所有字段(default: true) writeallfields: 是否寫/更新所有字段 (default: false) readproportion: read操作比例 (default: 0.95) updateproportion: update操作比例 (default: 0.05) insertproportion: insert操作比例 (default: 0) scanproportion: scan操作比例 (default: 0) requestdistribution: 使用哪種數據分布方式,主要有uniform, zipfian, hotspot, sequential, exponential or latest可選 (default: uniform) Uniform(等概率隨機選擇記錄)、Zipfian(隨機選擇記錄,存在熱紀錄)和Latest(近期寫入的記錄是熱記錄)。 minscanlength: scan時候,最小的scan條數(default: 1) maxscanlength: scan時候,最大的scan條數(default: 1000) scanlengthdistribution: scan時候,怎么選擇scan的條數,[scan的條數介於1到maxscanlength之間] (default: uniform) insertstart: 在並行執行loads和runs的時候,定義當前YCSB實例的起始數據 (default: 0) insertcount: 在並行執行loads和runs的時候,定義當前YCSB實例要操作的數據條數 (default: recordcount) fieldnameprefix: 字段名的前綴 (default: “field”)
運行 Workload
運行workload大概有以下幾個步驟:
-
選擇符合場景的workload
-
配置合適的參數(比如客戶端線程數)
-
執行Load階段數據加載(workload有兩個階段,一個是loading階段加載數據,一個是transactions階段在這些數據上執行操作)
-
執行workload
執行Load
nohup ycsb_home/bin/ycsb load hbase12 -P workloads/workloada -cp ycsb_home/hbaseconf -p table=ycsb01 -p columnfamily=f1 -threads 10 -s > ycsb_home/log/ycsb_load.log &
load:表示的是執行的load階段
hbase12:對應hbase1.2版本
-P workloads/workloada:指定負載配置
-cp ycsb_home/hbaseconf:指定hbase client配置文件
-p table=ycsb01:指定hbase表
-p columnfamily=f1:指定hbase表的列簇
-threads 10:指定ycsb線程數
-s:status,每隔10秒輸出狀態日志
日志分析
[OVERALL], RunTime(ms), 16487.0 [OVERALL], Throughput(ops/sec), 6065.384848668648 [OVERALL] 區顯示測試總體情況 RunTime(ms) 運行總時間 Throughput(ops/sec) 吞吐量,每秒操作數 [TOTAL_GCS_PS_Scavenge], Count, 23.0 [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 88.0 [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5337538666828411 [TOTAL_GCS_PS_MarkSweep], Count, 0.0 [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0 [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 [TOTAL_GCs], Count, 23.0 [TOTAL_GC_TIME], Time(ms), 88.0 [TOTAL_GC_TIME_%], Time(%), 0.5337538666828411 [TOTAL_GC*] 區顯示垃圾回收情況 [TOTAL_GCS_PS_Scavenge], Count, 23.0 Parallel Scavenge 回收次數 [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 88.0 Parallel Scavenge 回收時間 [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.533 Parallel Scavenge 回收時間百分比 [TOTAL_GCS_PS_MarkSweep], Count, 0.0 PS MarkSweep 回收次數 [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0 PS MarkSweep 回收時間 [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 PS MarkSweep 回收時間百分比 [TOTAL_GCs], Count, 23.0 全局 GC 次數 [TOTAL_GC_TIME], Time(ms), 88.0 全局 GC 時間 [TOTAL_GC_TIME_%], Time(%), 0.533753866 全局 GC 時間百分比 [READ], Operations, 50011.0 [READ], AverageLatency(us), 4418.49443122513 [READ], MinLatency(us), 1584.0 [READ], MaxLatency(us), 208895.0 [READ], 95thPercentileLatency(us), 8207.0 [READ], 99thPercentileLatency(us), 11463.0 [READ], Return=OK, 50011 [READ] 區顯示讀取操作的統計結果 Operations 總操作數 AverageLatency(us) 平均延遲(微秒) MinLatency(us) 最小延遲 MaxLatency(us) 最大延遲 95thPercentileLatency(us) p95延遲 99thPercentileLatency(us) p99延遲 Return=OK, 50011 結果(正確),總操作數 [CLEANUP](清理操作)、[UPDATE](更新操作)等等和 [READ] 區類似
執行Run
nohup ycsb_home/bin/ycsb run hbase12 -P workloads/workloada -cp ycsb_home/hbaseconf -p table=ycsb01 -p columnfamily=f1 -threads 10 -s > ycsb_home/log/ycsb_run.log &
注意事項
1.ycsb client盡量運行在非hbase集群節點,以減少ycsb client對regionserver資源的占用,影響測試結果。
2.留意ycsb client網絡IO情況,如果網絡帶寬被打滿,測不出實際性能。這種情況可以設置多ycsb client並行運行
3.多ycsb client並行運行,最后的執行結果綜合多個取平均值即可,主要關注TPS(ops/sec)和平均延遲、p95、p99延遲。