HBaseとRDBの比較
最後にHBaseとRDBを比較してみましょう。
まず、RDBの人気が高いの理由の一つとしてデータをSQLで扱えるということがあると思います。SQLは非常に強力で広く普及しているので、SQLでデータを扱えることは大きなメリットですが、HBaseはデータをSQLでは扱うことができません(※1)。
また、RDBはいわゆるACID属性を持っています。しかし、HBaseはRow内に限定されたトランザクションしかありません(※2)。
HBaseを使うことのメリットは、RDBで扱いきれないような大規模なデータを扱う場合にあります。自動シャーディングによって負荷が分散されていき、HRegionServerを増設することで性能をスケールすることができます。また、障害時にも自動的にフェイルオーバーされるなど運用面でメリットがあると考えています。
もちろん、RDBでも大規模なデータを扱うことは可能です。例えば、FacebookではMySQLを大規模なデータに対してスケールさせることに成功しています。ただし、そのためにはジョインを用いないことや非正規化を行う必要があります。
そうなってくると、HBaseとそうは変わらないように感じます。そういう意味では、HBaseはそういった作業をまとめたものと言えるでしょう。
読者の中には、そもそも大規模なデータがないのでHBaseなんて必要ないと思われる方がいるかもしれません。確かにそのようなケースもあるでしょう。
しかし、近年のビックデータという潮流の中で、今後アプリケーションを開発するときに、大規模なデータを利用することはないとは言い切れないのではないでしょうか。その際にあらゆる選択肢を持っておいた方が良いと思います。
その選択肢の一つとしてHBaseがあるということになります。
HBaseをSQLライクに扱うプロジェクトとしては、HBqlというものがあります。
hbase-0.94からは同リージョン内の複数Row間でのトランザクションが可能になっているようです。
参考:https://issues.apache.org/jira/browse/HBASE-5229
HBaseを触ってみよう
それでは実際にHBaseを動かしてみましょう。
執筆時点で最新のステーブル版であるhbase-0.94.3を使います。今回はスタンドアロンモードで動かすのでHDFSをインストールせず、HBaseのみインストールします。
HBaseをインストールする前にJavaのインストールが必要です。HBaseはJava6に依存しているので、Java7は使わないようにしてください。今回はJavaがすでにインストールされていることを前提とします。
また、Windowsにインストールする場合はCygwinをインストールする必要があります。
ただし、WindowsへのHBaseのインストールは、改行コードの扱いの違い(※3)やcygwinのバージョンなどによってはうまくいかないことがあります。無理にWindowsにHBaseをインストールするよりも、仮想化ソフトを使いLinuxのインスタンスを立ちあげてそちらにインストールすることをおすすめします。
HBaseのインストール
まず、本家のページからHBaseをダウンロードします。今回は、ftp.jaist.ac.jpからダウンロードしています。
$ cd /usr/local $ wget http://ftp.jaist.ac.jp/pub/apache/hbase/hbase-0.94.3/hbase-0.94.3.tar.gz
ダウンロードが完了したら、解凍します。
$ tar -zxvf hbase-0.94.3.tar.gz $ cd hbase-0.94.3
Javaへのパスが通っていない場合は以下を実行します
$ export JAVA_HOME=<Javaのインストールパス>
HBaseを起動します。
$ bin/start-hbase.sh
起動したら、http://localhost:60010/master-statusにアクセスしてみましょう。以下のような画面が表示されたら起動成功です。
HBaseを停止したい場合はの以下のコマンドを実行します。
$ bin/stop-hbase.sh