總網頁瀏覽量

2013年9月19日 星期四

Run YCSB on Windows7 with Eclipse 在windows 7 上跑YCSB

終於讓筆者給弄出來了

這樣不用linux也能在windows上跑hbase、YCSB啦
(各位如果能在linux上裝eclipse跑就在linux上面跑吧,因為hbase跟YCSB原本就是要在linux上跑的嘛!!!!)


這篇文章所說的YCSB以及HBase都在Windows上運作,只用Eclipse這個工具啟動他們。

因為YCSB原本是用來測試Hbase0.94.4,筆者另外在自己windows電腦安裝hbase0.94.4,安裝方法其實跟筆者之前安裝hbase0.97差不多。

這樣可以當練習專用的hbase。

其實Hbase0.96之後的API有大幅更動,所以想翻閱聖經本對照source code學習hbase會有困難度,因為課本裡面很多API在Hbase0.96已經消失了........= =

那麼咱正式進入安裝的步驟吧!!!!!
=================================================================
前提:用Eclipse啟動Hbase0.94.4,並建立名稱為usertable的表格,這個表格有三個columnfamily。
(You must run Hbase0.94.4 with Eclipse on Windows,and create a table named 'usertable'.

create 'usertabble','f1',f2','f3'
(不一定要三個columnfamily)


1. 用SVN check out YCSB 0.1.4
2. Import Existing Maven Project,匯入完畢專案架構如下圖,root是所有專案的根目錄。將root專案編譯表示也將其他專案編譯的意思。


3.設定環境變數(configurate variable)

a.將hbase-site.xml換成你正在使用的hbase裡面的hbase-site.xml檔案
我使用的是hbase0.94.4,而且都在hbase-default.xml設定參數,所以我將hbase-default.xml複製到YCSB的hbase-binding的conf之下,然後將檔案改名為hbase-site.xml。

b.在hbase-binding的pom.xml設定採用的hbase與hadoop版本
筆者採用hbase 0.94.4版    hadoop 1.0.4版

c. 設定root目錄之下的pom.xml ,如圖所示。
設定這邊是為了統一hbase-bind專案底下的jar包都採用slf4j-api-1.6.4、slf4j-log4j12-1.6.4。不這樣做的話會出現錯誤訊息告知你的slf4j的jar包太舊。


4.編譯專案,我這次在cmd編譯的,eclipse沒試過。
mvn package -DskipTests

如果編譯出現如下問題
at
org.codehaus.plexus.archiver.AbstractArchiver$1.hasNext(AbstractArchiver.java

從網路聽說mvn.bat檔案之中加上以下這行
set MAVEN_OPTS=-Xmx512m -Xms128m -Xss10m
改變JVM的記憶體配置會過。筆者也過了

上圖是cygwin的錯誤結果,筆者未設定JVM記憶體配置之前在cmd也曾發生同樣錯誤,


這個錯誤訊息在app4u是說:
"This is due to different incompatible versions of a library. The jar file that contains org.codehaus.plexus.archiver.AbstractArchiver$1.hasNext()Z is not present on your classpath. However there is a different version of the same jar on the classpath."
網站如下:
http://solutions.apps4u.co/en/class/org.codehaus.plexus.archiver.AbstractArchiver$1/method/hasNext/()Z/error/java.lang.NoSuchMethodException/

我依照這網址的方法照做,但是問題依然存在。

5.執行YCSB

a.如圖所示


b.這邊workloads是相關參數設定檔案,其他jar包必須加入classpath,如圖所示,否則YCSB會抗議。
上圖是筆者原本安裝的classpath配置。
其實jar檔案只留下hbase-binding跟hadoop-core即可(感謝120的留言提醒),但是記得要在root的pom.xml加上這麼一段。

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.4</version>
    </dependency>
     <dependency>  
     <!-- 以下是我自己加上 -->
        <groupId>org.slf4j</groupId>  
        <artifactId>slf4j-log4j12</artifactId>  
        <version>1.6.4</version>  
      </dependency>

要確認slf4j版本有沒有正確配置,請各位看倌打開root目錄下的pom.xml  選擇Dependency Hierachy,在右上角搜尋slf,請對照圖中使用的slf4j-api以及slf4j-log4j12的版本
所有的jar檔案採用的slf4j的jar檔案必須都採用同樣版本編譯。

c.Arguments設定:




 6.大功告成







參考網站:
http://cloudfront.blogspot.tw/2013/02/how-to-benchmark-hbase-using-ycsb.html#.UjhVwsZHIZ4
(PS:網站掛點小密技或者有些網站在某些地方會被擋住,各位可以將網址貼到wayback machine搜尋,如此一來就可以搭時光機回去看網站內容)

2 則留言:

  1. classPath我測試了一下,只需要加入hadoop-core-1.0.4.jar和hbase-binding-0.1.4.jar檔案
    就可以正常運行囉

    在啟動参數上增加 -p measurementtype=timeseries -s可以避免列印太多詳細的訊息,方便觀察。


    另外你的HBaseClient.java有沒有参考這一篇修改呢?
    http://www.cnblogs.com/gpcuster/archive/2011/08/16/2141430.html

    修改過的可以直接下命令設定hbase的参數喔。
    修改后的HBase客户端可以直接在命令行中指定测试需要使用的客户端参数,如zk的连接信息:-p hbase.zookeeper.quorum=hd0004-sw1.dc.sh-wgq.sdo.com,hd0001-sw1.dc.sh- wgq.sdo.com,客户端的本地缓存大小:-p hbase.client.write.buffer=100,等等

    回覆刪除