YCSB之HBase性能測試

一、YCSB背景

YCSB,全稱爲「Yahoo!Cloud Serving Benchmark」,是雅虎開發的用來對雲服務進行基礎測試的工具,其內部涵蓋了常見的NoSQL數據庫產品,如Cassandra、MongoDB、HBase、Redis等等。在運行YCSB的時候,能夠配置不一樣的workload和DB,也能夠指定線程數&併發數等其餘參數。html

二、初探

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

image

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

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

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文件夾本身建立),這樣就算安裝成功了。maven

  • 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,讀改寫,客戶端讀出一個記錄,修改它並將被修改的記錄返回;oop

【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.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

http://www.javashuo.com/article/p-rvrxltwm-mt.html

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

相關文章
相關標籤/搜索