YCSB之HBase性能測試


1、YCSB背景

YCSB,全稱為“Yahoo!Cloud Serving Benchmark”,是雅虎開發的用來對雲服務進行基礎測試的工具,其內部涵蓋了常見的NoSQL數據庫產品,如Cassandra、MongoDB、HBase、Redis等等。在運行YCSB的時候,可以配置不同的workload和DB,也可以指定線程數&並發數等其他參數。

2、初探

首先在官網上下載源碼編譯或者直接下載軟件包:https://github.com/brianfrankcooper/YCSB/releases/tag/0.10.0

image

(編譯的話需要maven工程和其他資源包的依賴比較麻煩,建議直接下載軟件包,解壓后進行簡單的操作(下文介紹)后就能直接用。)

下載壓縮包后上傳到對應的主機,解壓tar –xvf ycsb-0.12.0.tar.gz后的文件夾內目錄結構如下:

image

 

所有文件可以分為以下幾種類型:

  • bin,logs,lib,LICENSENSE.txt

        是一般軟件安裝后都有的,作用不贅述

  • 紅框中的目錄:

命名規則均為NOSQL數據庫名+’-binding’后綴。這些目錄也即表示了YCSB支持的所有的NOSQL數據庫類型,同時你也可以按照規范加入新的數據庫類型。每個bindings目錄內部都有lib子目錄,用於存放YCSB對訪問這些數據庫所需要的一些jar包依賴。將$HBASE_HOME/lib目錄下的所有jar包拷貝到$YCSB_HOME/hbase10-binding/lib中(lib文件夾本身存在,直接進行復制拷貝即可),同時將$HBASE_HOME/conf/hbase-site.xml拷貝到$YCSB_HOME/hbase10-binding/conf中(conf文件夾自己創建),這樣就算安裝成功了。

  • workloads目錄

        里面包含一些壓力測試的場景文件。YCSB自帶了6中壓力測試場景,文件和相應場景的對應關系如下:

image

workloada:混合了50%的讀和50%的寫;
workloadb:Read mostly workload,混合了95%的讀和5%的寫,該workload側重於測試集群的讀能力;
workloadc:Read only,100%只讀;
workloadd:Read latest workload,插入數據,接着就讀取這些新插入的數據;
workloade:Short ranges,短范圍scan,不同於隨機讀,每個測試線程都會去scan一段數據;
workloadf:Read-modiy-wirte,讀改寫,客戶端讀出一個記錄,修改它並將被修改的記錄返回;

【workload文件說明】

這里給出文件workloada的內容,看下其內容如下:

image

image

  • recordcound 是YCSB load(加載元數據)命令的參數,默認值1000表示默認加載的記錄條數,可以在命令行顯示修改該值(后面介紹)。
  • Operationcount 是YCSB run(運行壓力測試)命令的參數,默認值1000表示默認選取數據庫中的1000條數據進行壓力測試。對於workloada這種測試場景,就意味着讀數據在500左右,寫數據也在500左右
  • workload 指定了workload的實現類為 com.yahoo.ycsb.workloads.CoreWorkload
  • readallfields表示查詢時是否讀取記錄的所有字段
  • readproportion表示讀操作的比例,該場景為0.5
  • updateproportion表示更新操作的比例,該場景為0.5
  • scanproportion表示掃描操作的比例
  • Insertproportion表示插入操作的比例
  • Requestdistribution表示請求的分布模式,YCSB提供uniform, zipfian, latest三種分布模式

更多的參數含義可參考:https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads。據此可以定制自己的壓力測試場景。

3、壓力測試流程

3.1環境初始化:

(1) 創建測試數據表
使用hbase shell命令創建測試數據表usertable,列簇family

create 'usertable', 'family'

image

(2) 將hbase依賴的lib的文件拷貝到相應的-bing文件中(我這里是hbase10-binding/lib)【前面也已介紹】
(3) 將hbase配置文件拷貝到ycsb中。在$YCSB_HOME/hbase10-binding中新建conf目錄,並將$HBASE_HOME/conf/hbase-site.xml 拷貝到$YCSB_HOME/hbase10-binding/conf/中【前面也已介紹】

3.2加載數據:
切換到$ YCSB_HOME目錄,執行以下命令,加載1,000,000條記錄:

bin/ycsb load hbase10 -P workloads/workloada -p threads=10 -p table=usertable -p columnfamily=family -p recordcount=10000 -s > logs/load.log
(或 bin/ycsb load hbase10 -P workloads/workloada -p threads=10 -p table=usertable -p columnfamily=family -p recordcount=10000 )

參數解釋如下:
load 表示這是一次加載數據操作;
hbase10指明了所用的數據庫類型;
-P指明了所用的配置文件的路徑;
-p 可以顯示修改YCSB內置的默認配置,例如這里配置recordcount=10000來覆蓋之前說過的workloada中默認的recordcount=1000;
-s一次加載數據或執行測試的過程實踐很長,YCSB客戶端需要定時(默認10s)發送狀態信息;> logs/load.log表示結果日志寫入位置(若沒有logs文件夾就自己新建一個,也可以不加此參數,則運行結果直接打印到屏幕上);

image

image

3.3執行測試
以workloada測試場景為例,切換到$ YCSB_HOME目錄,執行以下命令進行壓力測試

bin/ycsb run hbase10 -P workloads/workloada -threads 10 -p operationcount=1000000 -p table=usertable -p columnfamily=family -p measurementtype=timeseries -p timeseries.granularity=2000 -s > logs/transaction-workloadAA.log

參數解釋如下:
-threads 10配置了並發線程個數
-p operationcount=1000000 覆蓋了workloada中operationcount=1000表示本次測試操作記錄數為1000000
-p measurementtype=timeseries -p timeseries.granularity=2000指明了YCSB客戶端多長時間匯總一次延時,timeseries.granularity屬性值的單位為1000milliseconds。所以這里的配置就表示2000s記錄一次本2000s的平均延時。

image

image 

測試運行結果的各屬性含義相關說明如下:

image

 

 

 

參考資料(依次遞減):

https://blog.csdn.net/zhangchen2449/article/details/53126884

https://blog.csdn.net/zx8167107/article/details/78753283

https://blog.csdn.net/Fighingbigdata/article/details/79495251

https://wenku.baidu.com/view/65a07ac5a0c7aa00b52acfc789eb172ded6399b8.html

https://blog.csdn.net/hustsselbj/article/details/46540377

https://blog.csdn.net/huoyunshen88/article/details/38299481

https://wenku.baidu.com/view/b8363464284ac850ac0242b3.html


免責聲明!

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



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