HBase性能測試


測試工具YCSB

自帶有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大概有以下幾個步驟:

  1. 選擇符合場景的workload

  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)和平均延遲、p95、p99延遲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM