HBaseなどについて今日調べたこと

HBaseはGoogleの基盤ソフトウェアであるBigTableオープンソースクローンである。Javaで記述されていて、Hadoopに依存し、実際のデータはHDFSHadoop Distributed File System)上に安全に保存される。Hadoopは、Google File Systemのオープンソースクローンである。(参考:http://codezine.jp/article/detail/2448?p=2

HBaseにおけるテーブルはHadoop上のMapReduceジョブの入出力として機能し、Java APIを通じアクセスが可能である。(参考:http://ja.wikipedia.org/wiki/HBase)。

BigTableは、数ペタバイタにもなり、数千台のサーバにまたがって保存される、構造化されたデータを管理するためのシステムである。Googleのさまざまなプロジェクトで使われている。Bigtableは疎な、分散され、永続化される、多次元な、ソート済マップである。テーブル内の行のキーとして任意の文字列が使用される。BigTableは行キーの辞書順でデータを管理する。ある範囲の行がタブレットとして、同じサーバ上に格納される。そこで同時にアクセスされることの多いデータには(FQDNを逆順にするなど)、辞書順で近くなるようにキーを割り当て、同じタブレットに入るようにする。列キーは列ファミリに所属し、列ファミリの単位でアクセス制御とメモリ割り当てが行われる。列ファミリの数は多くても100までだが、列の数に限りはない。BigTable内の各セルには同じデータの複数バージョンを持つことができる。最新Nバージョンだけを保持することもできる。(参考:http://labs.google.com/papers/bigtable-osdi06.pdf

HBaseの公式サイト(http://hbase.apache.org/)から、hbase-0.90.1.tar.gzをダウンロードしてみた。README.txtに触れられていたdocs/book.htmlを読み進めていく。conf/hbase-site.xmlでhbase.rootdirプロパティを設定する。HBaseの起動は、./bin/start-hbase.shで行えるらしいが、cygwinだと、cygpath: cannot create short name ofなどの文句が数行出た後、localhost: ssh: connect to host localhost port 22: Connection refusedというメッセージで終了する。

http://d.hatena.ne.jp/Takao/20100203/1265193613にあるように、SSH Serverをcygwin上で動かさないとだめなようなので、インストールしてみる。cygrunsrv -S sshd をいきなりやると、cygrunsrv: Error starting a service: OpenService: Win32 error 1060:と怒られる。sshdの設定ファイルが必要なのかと、ssh-host-config -y をやってみると、パーミッションの問題でエラーになるので、chmod +r /etc/passwd を実行しようとしたら、やはりPermission denied。Vista以降の場合は、管理者としてcygwinを実行しないといけないようだ。

管理者としてcygwinを起動し、以下を実行すると、ssh-host-config -yが成功した。(途中でcyg_serverアカウントのパスワードを聞かれた)
chmod +r /etc/passwd
chmod +r /etc/group
chmod 755 /var

ssh-host-config -yが成功したら、cygrunsrv -S sshd も成功したので、./bin/start-hbase.shを再実行。
javaがみつからない、hbase-daemon.shがみつからないというメッセージで落ちる。

以下のように、シンボリックリンクを張って、
ln -s /cygdrive/c/Program\ Files/Java/jdk1.6.0_23 /usr/local/jdk1.6.0_23

conf/hbase-env.shでJAVA_HOMEを設定する。
export JAVA_HOME=/usr/local/jdk1.6.0_23

hbase-daemon.sh: No such file or directoryでエラーになっているためか、masterのログで2181ポートに接続できていない。

2011-04-08 15:24:17,085 INFO org.apache.zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=regionserver:60162
2011-04-08 15:24:17,085 INFO org.apache.zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181
2011-04-08 15:24:17,085 WARN org.apache.zookeeper.ClientCnxn: Session 0x0 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:500)
at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077)

hbase shell を動かすと、下記のようなエラーも出る。

java.lang.UnsatisfiedLinkError: C:\cygwin\tmp\jline_.dll: プロセスはファイルにアクセスできません。別のプロセスが使用中です。

で、ここまできたところで、hbase-0.90.1.tar.gzの中に、docs/cygwin.htmlがあることに気付いた。ううん。状況は、あまり変わらない。うーん、cygwinを業務でバリバリ使うというのは、やはり無理があるか。