本文只講一個很簡單的問題,YCSB對HBase集羣的測試。雖然網上有不少介紹YCSB測試HBase的文章,但都是針對本地HBase僞分佈式集羣的。你們都知道,稍微正式一些的壓測都會要求測試客戶端與目標集羣分離部署,並且僞分佈式集羣一般不會在生產環境下使用,自己也沒有太大的壓測意義。本文會着重介紹一下壓測遠程HBase徹底分佈式集羣的不一樣之處。html
YCSB是Yahoo開源的性能測試工具,支持不少種類的NoSQL數據庫測試,這裏既包括了經典的HBase/Cassandra/MongoDB,也有近兩年新推出的Spanner/Kudu等。此外,YCSB最大的特色是其靈活性,對於還沒有歸入官方支持的NoSQL數據庫,能夠快速進行二次開發。若是你正在進行NoSQL數據庫選型或者研發一款定製版Nosql數據庫,那麼YCSB必定是你居家旅行必備良藥。git
二次開發工做主要是com.yahoo.ycsb.DB的基礎上定義本身的接口實現。DB是一個抽象類,定義了NoSQL數據庫的5類典型操做,包括insert/update/delete/read/scan。你須要爲本身的Nosql實現該上述方法。固然還有一些初始化(init)和收尾工做(cleanup)也要有相應的處理。github
HBase是YCSB較早支持的NoSQL數據庫,目前在主線版本上支持0.98/1.0/1.2/1.4/2.0幾個版本(後兩個版本是在2018-03-23增長的)。這些版本的主要差異在於對DB類的不一樣實現,閱讀源碼能夠發現,在1.0版本後,DB的實現類並無發生變化,1.2/1.4/2.0三個版本都是直接繼承了1.0版,沒有重載任何方法。從這點上來講,Ivan認爲使用其中哪一個版本測試應該都是OK的。sql
使用YCSB進行HBase徹底分佈式集羣測試,主要是如下幾個步驟。shell
Ivan的HBase版本爲1.2.6,部署HBase集羣具體步驟略去。數據庫
Ivan選擇的是YCSB0.13版本,若是使用master應該也是OK的,前文已經說過,這兩個版本中HBase的訪問接口是同樣的。maven
wget https://github.com/brianfrankcooper/YCSB/archive/0.13.0-staging.zip
執行進行編譯。分佈式
mvn clean package
因爲YCSB支持了不少NoSQL數據庫,因此在編譯時依賴的Jar包也比較多。Ivan嘗試了幾回編譯,都因爲下載依賴包超時失敗,尤爲是在cassandra部分。看了下maven的輸出信息,超時的部分都是測試相關的。因此調整命令以下工具
mvn clean package -Dmaven.test.skip=true
編譯順利完成。oop
本文的重點來了!!!不少人容易犯暈的地方。
事實上,若是YCSB與HBase僞分佈式集羣合併部署時,這部分的配置是能夠忽略的。YCSB經過上下文全局變量能夠直接獲得HBase的信息,實現壓測。可能這就是網上不少文章並不去介紹配置的緣由。
咱們仍是從YCSB官方文檔找答案,在0.94/0.98/1.0三個版本中給出的配置方式徹底不一樣,仔細閱讀發現1.0版本其實是特別針對Google BigTable的配置文件。這因爲BigTable提供了對HBase的兼容API,YCSB將其做爲一種NoSQL雲服務也歸入了進來。可是此處的配置沒有參考意義。在1.2版本中,雖然接口代碼繼承自1.0版本,但readme中明確提到配置文件要參考0.98版本,後續1.4/2.0的readme基本是照抄。
閱讀0.98版本的readme,發現其實設置很是簡單,咱們只須要將HBase集羣master節點下的hbase-site.xml文件拷貝到YCSB節點的某個位置,並在稍後的命令中指定便可。 網上有的文章會提到其餘配置甚至腳步文件,這裏Ivan明確的說,只須要hbase-site.xml,不須要其餘文件!!!
Ivan的hbase-site.xml文件內容以下。
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://master:9000/hbase</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/bigdata/zookeeper-3.4.11/zkData</value> </property> </configuration>
事實上,YCSB主要是從中讀取zookeeper的節點信息。
Ivan將hbase-site.xml拷貝到/home/ycsb-hbase/conf(也可根據你的環境定義其餘路徑)目錄下
因此相應的,請修改YCSB本地的hosts文件,將機器名與IP的對應關係維護進去。
建立usertable表,這個是YCSB測試的前置條件,測試腳本中不會自動建立
create 'usertable','family'
最後一步,只須要在命令行中增長 -cp 參數指定hbase-site.xml的路徑便可。 例如如下命令。
1)加載數據
bin/ycsb load hbase10 -P workloads/workloada -cp /home/ycsb-hbase/conf -p table=usertable -p columnfamily=family -threads 100
2)執行scan測試
bin/ycsb run hbase10 -P workloads/workloade -cp /home/ycsb-hbase/conf -p table=usertable -p columnfamily=family -threads 100
打完收工。
最後囉嗦一句,YCSB測試HBase徹底分佈式集羣的主要差別在於配置文件,即hbase-site.xml和修改本地hosts文件,目的是爲了鏈接zookeeper集羣。
更多YCSB介紹與測試命令可參考前文 NoSQL性能測試工具YCSB-Running a Workload