HBase性能測試

測試工具YCSB

自帶有hbase pe,可是pe只能統計每一個線程執行的狀況,不能統計總體的狀態。因此仍是推薦使用YCSBgit

https://github.com/brianfrankcooper/YCSBgithub

使用參考文檔:數據庫

https://github.com/brianfrankcooper/YCSB/wiki網絡

 

前置準備

一:首先確認集羣配置,好比cpu、內存、磁盤、網絡帶寬工具

二:建立hbase表,設置表重要屬性,好比使用哪一種壓縮,哪一種塊編碼等等。通常也會建立好預分區,在建立預分區的時候,因爲YCSB默認生成的rowkey是以「user」開頭的,因此建立預分區應作對應調整,好比:oop

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大概有如下幾個步驟:編碼

  1. 選擇符合場景的workloadspa

  2. 配置合適的參數(好比客戶端線程數)

  3. 執行Load階段數據加載(workload有兩個階段,一個是loading階段加載數據,一個是transactions階段在這些數據上執行操做)

  4. 執行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 &

 

注意:Load階段其實就是裝載數據即往hbase中插入數據,workload文件中的recordcount就是將要插入的條數。run階段就是對hbase進行各類操做,operationcount就是操做數,所以load階段必需要正確執行完成,不然在run階段會有相似於[READ-FAILED]之類的錯誤。

注意事項

1.ycsb client儘可能運行在非hbase集羣節點,以減小ycsb client對regionserver資源的佔用,影響測試結果。

2.留意ycsb client網絡IO狀況,若是網絡帶寬被打滿,測不出實際性能。這種狀況能夠設置多ycsb client並行運行

3.多ycsb client並行運行,最後的執行結果綜合多個取平均值便可,主要關注TPS(ops/sec)和平均延遲、p9五、p99延遲。

相關文章
相關標籤/搜索