最近、仕事でHadoopを使うことになりました。
Hadoopに関しては、Hadoop本
<table style="width:75%;border:0;" border="0"><tr><td style="border:none;" valign="top" align="center">Hadoop</td><td style="padding:0 0.4em;border:0;" valign="top">Hadoop
(2010/01/25)
Tom White

商品詳細を見る</td></tr></table>
を読めばだいたいのことはわかるでしょう。
(訳がこなれていない部分があるので、英語版も念のため買っておくと便利です。iPhone版が安くてお薦め)

Hadoopで集計した結果を保存/参照するのに、HBaseを使おうと思っています。
分散環境でのパラメータが分かりにくかったので、Getting Startedを超訳してみたいと思います。



始めるには


まずはファイルをダウンロードすべし。
Hadoop本体と同様、スタンドアローン、擬似並列、完全並列の3つのモードがある。
まずは、Requirementsを読むこと。
HBASE_HOMEJAVA_HOMEを設定すべし。

スタンドアローン


デフォルト値はスタンドアローン用になっているので、そのままでOK。

擬似並列、完全並列


Hadoop Distributed File System (DFS)を使うので、そちらのセットアップを先に済ませること。

擬似並列


HBaseはhbase-default.xmlに全ての設定値がかかれており、必要なものだけhbase-site.xmlで上書きする。
擬似並列で最低限必要なものは、hbase.rootdirで、hdfs://localhost:9000/hbase などとする。

/hbaseディレクトリはHBaseが初期化するので、自分で作らなくてもよい。

完全並列


まず、hbase-site.xmlのhbase.cluster.distributedをtrueにする。
次に、${HBASE_HOME}/conf/regionserversにRegion Server(実際にデータを保存するサーバー)を1行1サーバーで記入。${HADOOP_HOME}/conf/slavesと同じようなもの。

続いてZooKeeperの設定(ZooKeeperはHBaseの各ノードが協調して動くために使う)。HBaseの各ノードからもクライアントからもアクセス可能になっている必要がある。HBase専用で動かす方法と、事前に用意したZooKeeperクラスタを利用する方法がある。前者にするには、${HBASE_HOME}/conf/hbase-env.shのHBASE_MANAGES_ZKをtrueにする。後者にするにはfalseにする。

ZooKeeperの設定は、ZooKeeperのzoo.cfgで行う方法と、HBaseのhbase-site.xml内にhbase.zookeeper.property.OPTIONを書く方法がある。(HBaseを初めて使うなら後者がお薦め。何が指定できるかはhbase-default.xmlを参照)

最小限必要なのは、hbase.zookeeper.quorum。quorumはZooKeeperを構成するサーバーのこと。quorumは3台or5台or7台とし、各サーバーにRAM1GBと(可能であれば)専用のディスクを割り当てることを推奨。カンマ区切りでマシン名を列挙する。

また、ZooKeeperのデータの保存ディレクトリのデフォルト値が/tmp配下になっているので、hbase.zookeeper.property.dataDirで変えること。

HBASE_MANAGES_ZKがtrueの場合、ZooKeeperの起動/停止はHBaseの起動/停止中に自動的に行われる。自分でやる場合は、
${HBASE_HOME}/bin/hbase-daemons.sh {start,stop} zookeeper
で可能。




はまった点。
その1:hbase.zookeeper.property.dataDirのディレクトリを作ってなかった。
その2:AmazonEC2で試していたが、hbase.zookeeper.quorumにはpublicなほうのホスト名を入れていたが、ZooKeeperがhostnameで取ってきたホスト名(privateなほう)を内部的に使うらしく動かなかった。
その3:ZooKeeperが動かないと RegionServerへの接続がうまくいかず、Masterから停止ができず面倒(手でkillした)