1、YCSB背景 YCSB,全稱為“Yahoo!Cloud Serving Benchmark”,是雅虎開發的用來對雲服務進行基礎測試的工具,其內部涵蓋了常見的NoSQL資料庫產品,如Cassandra、MongoDB、HBase、Redis等等。在運行YCSB的時候,可以配置不同的workload ...
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
(編譯的話需要maven工程和其他資源包的依賴比較麻煩,建議直接下載軟體包,解壓後進行簡單的操作(下文介紹)後就能直接用。)
下載壓縮包後上傳到對應的主機,解壓tar –xvf ycsb-0.12.0.tar.gz後的文件夾內目錄結構如下:
所有文件可以分為以下幾種類型:
- 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中壓力測試場景,文件和相應場景的對應關係如下:
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的內容,看下其內容如下:
- 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'
(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文件夾就自己新建一個,也可以不加此參數,則運行結果直接列印到屏幕上);
或
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的平均延時。
測試運行結果的各屬性含義相關說明如下:
參考資料(依次遞減):
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