CLOVER🍀

That was when it all began.

Apache HBaseことはじめ

ちょこちょこNoSQLをかじっていっていますが、今度はApache HBaseを使ってみようと思います。

Apache HBase
http://hbase.apache.org/

on HadoopなNoSQLですが、自分はHadoopについては素人。3年くらい前、0.20.Xとかいってた時期に、とりあえず入れてみてWordCountしたくらいの記憶しかありません。まあ、触っていないも同然。

これを機に、ちょっとはHadoop周りに詳しくなれるといいなぁ…。

とは言っても、仕事ではまず使わないんですけどね。

インストール

とりあえず、さわりということで。Getting Startedを見ながら。
*最初はCDH4を使おうとしたのですが、HBaseが起動しなかったのでやめました…

Quick Start/Getting Started
http://hbase.apache.org/book/quickstart.html

ダウンロードページから、現時点での最新版0.95.2をダウンロード。

自分は、「/usr/local/apache-hbase」ディレクトリ配下にインストールしました。

$ cd /usr/local/
$ sudo mkdir apache-hbase
$ cd apache-hbase/
$ sudo cp [ダウンロードディレクトリ]/hbase-0.95.2-hadoop2-bin.tar.gz ./.
$ sudo tar -zxvf hbase-0.95.2-hadoop2-bin.tar.gz
$ sudo rm hbase-0.95.2-hadoop2-bin.tar.gz
$ sudo chown -R [HBaseの起動ユーザ].[HBaseの起動ユーザ] hbase-0.95.2-hadoop2
$ sudo ln -s hbase-0.95.2-hadoop2 current

エイリアスを貼っているのは、あくまで自分の好みです。

いずれ擬似分散モードとしたいので、今はconf/hbase-site.xmlは無視して進めます。データが「/tmp」に保存されることも、よしとします。

.bashrcにPATHくらいは通しておきましょうか。

export HBASE_HOME=/usr/local/apache-hbase/current
PATH=${HBASE_HOME}/bin:${PATH}

再評価。

$ . .bashrc

以降は、HBaseにPATHを通してあるものとして進めます。

あと、Javaのインストールと環境変数JAVA_HOMEの設定についても、実施済みとします。

HBaseの起動

以下のコマンドで、HBaseを起動します。

$ start-hbase.sh
starting master, logging to /usr/local/apache-hbase/current/logs/hbase-[ユーザ名]-master-[ホスト名].out

ログファイルは、上記のコンソール出力されているファイルと同じディレクトリにある、

hbase-[ユーザ名]-master-ubuntu.log

HBase Shellを使う

それでは、チュートリアルに沿ってHBase Shellを使ってみましょう。

$ hbase shell

超重いんですけど(笑)。

あ、起動した。

$ hbase shell
2013-09-02 22:50:13,410 WARN  [main] conf.Configuration: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.95.2-hadoop2, rUnknown, Thu Aug 15 13:22:42 PDT 2013

hbase(main):001:0>

このシェル、JRubyだそうですね。

まずは、テーブルとカラムファミリの作成。

hbase(main):001:0> create 'test', 'cf'
2013-09-02 22:53:02,395 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
0 row(s) in 10.3790 seconds

=> Hbase::Table - test

作成に、10秒かかってる…。

テーブル一覧。

hbase(main):002:0> list 'test'
TABLE                                                                                                       
test                                                                                                        
1 row(s) in 0.0980 seconds

=> #<#<Class:0x7d01b36a>:0x75a34889>

データの登録。

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0650 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0050 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0040 seconds

Scan。

hbase(main):006:0> scan 'test'
ROW                          COLUMN+CELL                                                                    
 row1                        column=cf:a, timestamp=1378130074501, value=value1                             
 row2                        column=cf:b, timestamp=1378130081263, value=value2                             
 row3                        column=cf:c, timestamp=1378130088989, value=value3                             
3 row(s) in 0.0870 seconds

データの取得。

hbase(main):007:0> get 'test', 'row1'
COLUMN                       CELL                                                                           
 cf:a                        timestamp=1378130074501, value=value1                                          
1 row(s) in 0.0260 seconds

テーブルの無効化。

hbase(main):008:0> disable 'test'
0 row(s) in 1.5360 seconds

テーブルの削除。

hbase(main):009:0> drop 'test'
0 row(s) in 0.2160 seconds

HBase Shellの終了。

hbase(main):010:0> exit

HBaseの終了

以下のコマンドで、HBaseを終了します。

$ stop-hbase.sh
stopping hbase.................

こんなところで。全体的に、自分のPCだとすごく非力な感じがするのですが、これからHadoopを擬似分散モードとかで動かせるかな…?