總網頁瀏覽量

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搜尋,如此一來就可以搭時光機回去看網站內容)

2013年9月10日 星期二

maven build錯誤解決辦法

1.如果在執行hbase或者執行maven,遇到與jar檔案有關的bug時候,那麼就重新build一次,要build之前可以去.m2/repository/org下所對應的資料夾砍掉再重新build一次。
例如:
出現jruby-complete-1.6.8.jar檔案的bug
那麼就去
C:\OOXXX\.m2\repository\org\jruby\jruby-complete
將1.6.8資料夾刪掉之後再重新build


2.如果在eclipse或者cmd上maven build錯誤,可以嘗試著在cygwin之下做maven build。




===============================================================




2013年9月7日 星期六

windows 7+hbase (0.97)+eclipse (Juno) 在windows 7上用Eclipse跑hbase


壹、所需系統環境配置與軟體
一、JDK1.6

二、Eclipse(Kepler或Juno皆可])

三、安裝maven3.05以及eclipse套件也要plugin maven
(安裝辦法請參考其他網友的blog)


四、安裝JRuby(事後證明不必安裝)
據說是為了下hbase shell指令,因為hbase shell是採用JRuby執行
(但是筆者自己安裝時候沒下載JRuby依然可以用eclipse啟動hbase shell,大概是因為我用maven build時maven已經幫忙下載JRuby的jar檔案了,如下圖)

五、安裝cygwin並且設定環境變數
(安裝方式請參考其他網站,官網有安裝檔案可以一鍵next按到底)
據網友表示這是為了能夠下達start指令啟動hbase
若在eclipse或者命令提示字元maven build有錯時,可以嘗試在cygwin底下build程式。
去pom.xml所在目錄下達指令:mvn clean install -DskipTests
筆者在某些場合windows無法編譯過,所以只好用cygwin編譯了
貳、安裝篇
一、安裝Hbase
1.用svn抓hbase原始碼
位址如下  (位址可能會有變化,請留意)
http://svn.apache.org/repos/asf/hbase/trunk




本案是例載到0.97版的


2. Import "Existing Maven Project"
       a.選擇Hbase source code根目錄,全部打鉤匯入,否則import檔案不全會有錯誤。


b.如果是第一次安裝Maven,在Import時可能會多一個build-helper-maven-plugin,那麼按下一步


c.安裝maven plugin的畫面


d.開始安裝maven plugin,筆者第一次安裝約莫等了十幾分鐘



e.裝完之後的專案架構如下圖。
( i ).    hbase專案是根目錄,裡面已經放一堆.sh檔案、ruby檔案(.rb)、設定hbase-site.xml、regionservers。
(ii)      因為筆者Import進來之後,maven已經自動幫我將source code加進來。所以就不執行Maven generate-sources。如果讀者Import之後裡面沒有src/main/java、src/test/java,也就是沒有.java檔案的話或者懷疑.m2/reposity目錄下少了某些jar檔案,就執行Maven generate-sources,之後執行maven build


3.設定環境變數(設定參數)

( i ). 設定hbase-default.xml
(或者hbase-site.xml,在hbase-site.xml添加參數的話會改寫(override)hbase-default.xml的設定,筆者直接更動hbase-default.xml)
 
必須更動的參數,否則會有bug:
<property>  
  <name>hbase.defaults.for.version.skip</name>
    <value>true</value>
</property>
這個參數必須直接在hbase-default.xml設定


<property>     <name>hbase.rootdir</name>
    <value>file:///D:/Hbase_rootdir</value>
 </property>



另一種安裝順序

1.用SVN抓hbase source code
2.去cygwin編譯Hbase  下指令mvn clean install -DskipTests,這時maven會幫我們將需要的jar檔案下載進.m2/repository/org底下。
3.去Eclipse Import Existing Maven Project(Import 方法一樣)
4.若出現跳脫字元的bug,去程式碼多加一個斜線吧
5.設定環境參數(跟上面設定一樣)




叁、執行篇

一、在eclipse啟動Hbase

1.Run Configuration→新增Java Application→指定Project以及要執行的類別

2. 設定要傳進類別的指令:start

註記:ClassPath、Environment、JRE等項目不必做設定



3. 按下Run
( i ).  如果是第一次在電腦Run可能會出現下圖,關於windows防火牆封鎖的訊息,可以按"取消"沒關係。(紅色的錯誤訊息跟防火牆無關)


(ii).   成功啟動的畫面
   
成功啟動hbase之後,會在hbase.rootdir指定的目錄下產生hbase資料庫檔案,如此一來相當於在windows上建一個hbase。




成功啟動hbase我們可以在瀏覽器打上localhost:60010,可以看hbase的狀態。顯示Master、RegionServer、Table、Task......等訊息。




二、進入hbase shell

1. Run Configuration→新增Java Application→指定Project與Main class



2. 設定要傳給Main的參數,因為hbase shell是靠JRuby運作,所以這邊Program arguments與VM arguments的參數都是指定JRuby的檔案或函式庫

註記:ClassPath、Environment、JRE等項目不必做設定


3. 按下Run
成功啟動進入hbase shell,可以在畫面上打字下指令。
綠色字體是使用者在上面打hbase shell指令。
如果沒有在hbase-default.xml設定hbase.rootdir的話,啟動hbase shell之後下list指令就會一直跑出紅色字體(unable to open socket to .....)

三、Hbase stop
Hbase必須執行stop
最好不可以用terminate方式(按下紅色方形圖案)停止hbase,否則下次會無法正常啟動hbase


肆、注意事項(筆者碰壁筆記):
一、version的問題
Q:如果出現如下訊息file seems to be for and old version of Hbase  (0.97.0-SNAPSHOT),如下圖:

A:必須去hbase-common\src\main\resources\hbase-default.xml
將hbase.defaults.for.version.skip屬性的value改為true



2.在eclipse啟動hbase出現如下錯誤訊息
Q:
Will not attempt to authenticate using SASL 
Unable to open socket to 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181

錯誤訊息(1):

INFO zookeeper.ClientCnxn: Opening socket connection to server 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (無法定位登入配置)
ERROR zookeeper.ClientCnxnSocketNIO: Unable to open socket to 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181
WARN zookeeper.ClientCnxn: Session 0x141085eb0250001 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.SocketException: Address family not supported by protocol family: connect
at sun.nio.ch.Net.connect(Native Method)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:532)
at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:266)
at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:276)
at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:958)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:993)
regionserver.HRegionServer$PeriodicMemstoreFlusher: RS:0;YYP-PC:52645.periodicFlusher exiting
INFO regionserver.Leases: RS:0;YYP-PC:52645.leaseChecker closing leases
INFO regionserver.Leases: RS:0;YYP-PC:52645.leaseChecker closed leases

錯誤訊息(2):

INFO regionserver.HRegionServer$PeriodicMemstoreFlusher: RS:0;YYP-PC:52645.periodicFlusher exiting
INFO regionserver.Leases: RS:0;YYP-PC:52645.leaseChecker closing leases
INFO regionserver.Leases: RS:0;YYP-PC:52645.leaseChecker closed leases
INFO zookeeper.ClientCnxn: Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (無法定位登入配置)
WARN zookeeper.ClientCnxn: Session 0x141085eb0250001 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:599)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)


錯誤訊息(3):

ERROR handler.CreateTableHandler: Error trying to create the table hbase:namespace
java.io.IOException: Target file:/C:/Users/YYP/AppData/Local/Temp/hbase-YYP/hbase/data/hbase/namespace/namespace is a directory
at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:359)
at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:361)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:211)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:163)
at org.apache.hadoop.fs.RawLocalFileSystem.rename(RawLocalFileSystem.java:292)
at org.apache.hadoop.fs.ChecksumFileSystem.rename(ChecksumFileSystem.java:425)
at org.apache.hadoop.hbase.master.handler.CreateTableHandler.handleCreateTable(CreateTableHandler.java:216)
at org.apache.hadoop.hbase.master.handler.CreateTableHandler.process(CreateTableHandler.java:155)
at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:131)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)






A:
在hbase-default.xml更改hbase.rootdir屬性
改成絕對路徑(相對路徑還沒測過)
file:///D:/HbaseZ_rootdir
再重新啟動hbase

註記一:
a.
這問題若沒解決雖然可以進入hbase shell
但是下list指令之後會一直出現
"unable to open socket to 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181"訊息

b.曾經根據網路解決方案,試過修改system32/drivers/etc/hosts的IP與主機對應名稱,但此方法對我這案例無效,問題依然存在。

c.如果原始碼已經用maven build過後,電腦主機名稱最好別隨意更改。
如果執意要改電腦名稱,那就改名之後,再用maven build一次,筆者沒試過,不保證會成功。

d.這bug跟似乎防火牆無關,筆者在自家裡試過也出現同樣問題。


註記二:
筆者為了解決bug,曾經更動的地方
1. system32/drivers/etc/hosts
    網路上有說如果遇到unable to open socket to 0.0:0.0.0的bug,可以更改hosts的內容。但是筆者依照網路上所說更動,問題依然存在。最後是設定hbase.rootdir給定絕對路徑問題就解決了,如果用本文方法無法解決那就用網路上的方法更動hosts吧。  

2.zookeeper.quorum,依照預設值localhost。
("hbase.zookeeper.quorum must read 127.0.0.1 because for some reason localhost does not seem to resolve properly on Cygwin"但本案例並非在Cygwin跑hbase所以就不更動啦。依照預設值localhost)




3.regionservers設定檔,維持localhost

附錄:
A.貼上可以成功啟動並執行hbase shell時候的ClassPath配置


B.貼上可以正常執行hbase-server的maven jar檔案配置





Zookeeper設定


我們可以設定zookeeper的檔案存放目錄。
在hbase-default.xml設置 
<property>
<name>hbase.zookeeper.property.dataDir</name>
    <value>D:/zookeeper</value>
</property>
這邊路徑不可以寫成file:///D:/zookeeper





參考網站
http://www.cnblogs.com/shitouer/archive/2012/10/24/2736923.html
http://michaelmorello.blogspot.tw/2012/06/hbase-096-eclipse-maven.html