CLOVER🍀

That was when it all began.

HBaseでJavaクライアントプログラミング、のさわりだけ

HBaseを擬似分散環境で立てたので、ちょっとだけJavaクライアントプログラミングを。

言語にはClojureを使いました。今後、HBaseのJavaクライアントプログラミングは、Clojureでいこうと思います。理由は、Clojureをちゃんと使えるようになりたいから、それだけなのですが。

こちらの馬本に載っている、Javaクライアントプログラミングの最初の方を軽く真似。

HBase

HBase

加えて、テーブルが存在しなかった場合に作成するプログラムにしてみました。

getting_started.clj

(use '[leiningen.exec :only (deps)])
(deps '[[org.apache.hbase/hbase-client "0.95.2-hadoop2"]])

(ns hbase.getting-started
  (:import (org.apache.hadoop.hbase HBaseConfiguration HTableDescriptor HColumnDescriptor)
           (org.apache.hadoop.hbase.client HBaseAdmin HTable Put)
           (org.apache.hadoop.hbase.util Bytes)))

(def conf (HBaseConfiguration/create))

;; テーブルが未存在の場合、テーブル作成
;; テーブルが未存在の場合、テーブル作成
(let [admin (HBaseAdmin. conf)
      tableDesc (HTableDescriptor. "testtable")]
  (when-not (.tableExists admin (.getName tableDesc))
    (.addFamily tableDesc (HColumnDescriptor. "colfam1"))
    (.createTable admin tableDesc)))

;; テーブルにデータをPut
(with-open [table (HTable. conf "testtable")]
  (let [put (Put. (Bytes/toBytes "row1"))]
    (doto put
      (.add (Bytes/toBytes "colfam1") (Bytes/toBytes "qual1") (Bytes/toBytes "val1"))
      (.add (Bytes/toBytes "colfam1") (Bytes/toBytes "qual2") (Bytes/toBytes "val2")))
    (.put table put)))

実行。

$ lein exec getting_started.clj 
9 07, 2013 1:14:05 午前 org.apache.hadoop.conf.Configuration warnOnceIfDeprecated
WARNING: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
log4j:WARN No appenders could be found for logger (org.apache.hadoop.security.authentication.util.KerberosName).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
9 07, 2013 1:14:06 午前 org.apache.hadoop.util.NativeCodeLoader <clinit>
WARNING: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
9 07, 2013 1:14:06 午前 org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper <init>
情報: Process identifier=hconnection-0x5223dd3a connecting to ZooKeeper ensemble=localhost:2181
9 07, 2013 1:14:06 午前 org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper <init>
情報: Process identifier=catalogtracker-on-hconnection-0x5223dd3a connecting to ZooKeeper ensemble=localhost:2181

log4jの警告が出たりしていますが、とりあえず気にしない。

結果は、HBase Shellで確認。

hbase(main):014:0> list
TABLE                                                                                                              
hbase:namespace                                                                                                    
testtable                                                                                                          
2 row(s) in 0.0570 seconds

=> #<#<Class:0x322885a2>:0x495d114a>
hbase(main):015:0> scan 'testtable'
ROW                           COLUMN+CELL                                                                          
 row1                         column=colfam1:qual1, timestamp=1378484047821, value=val1                            
 row1                         column=colfam1:qual2, timestamp=1378484047821, value=val2                            
1 row(s) in 0.0250 seconds

ちゃんと、動いているようです。