k4200’s notes and thoughts

Programmer side of k4200

検索エンジンを作る(予定)その4 〜 NutchをHBase分散モードで動かす

過去の記事

NutchがHBaseのクラスターを使うようにする

前回、HBaseを分散モードに移行したので、NutchがそのHBaseのクラスターを使うようにする。

Nutch側の設定変更は1点だけ。

NUTCH_HOME/runtime/local/conf/hbase-site.xml の内容を、前回のエントリーで書いたものと同じにする。HBaseのどれかのノード上でNutchを動かすのであれば、/etc/hbase/conf/hbase-site.xml からシンボリックリンクを貼ればOK。

データ移行

次に、スタンドアローンモード時のデータを分散モードHBaseに移行する。やることは簡単で、以下の2つだけ。

ディスクの空き容量が十分かを確認してから実施する。

export

インスタンスを起動し、以下のコマンドを実行。

$ hbase org.apache.hadoop.hbase.mapreduce.Export webpage /data/export/webpage

webpage というのが、エクスポートするテーブル名。その次がエクスポート先のディレクトリ。ディレクトリは事前に存在していてはいけない。上の例の場合、/data/export まで作成しておけばOKで、/data/export/webpage は作っちゃだめ。

終了したら旧インスタンスは停止し、データディレクトリも削除してOK。

移行先でテーブル作成

インポートなんだけど、事前にテーブルが存在していないと以下の様なエラーが出る。

13/02/06 09:54:21 WARN client.HConnectionManager$HConnectionImplementation: Encountered problems when prefetch META table:
org.apache.hadoop.hbase.TableNotFoundException: Cannot find row in .META. for table: webpage, row=webpage,,99999999999999

ということでテーブルを事前に作成する必要がある。
TODO: テーブル構造のエクスポート→インポートが出来ないか後で調べる。

Nutchの場合初回起動時にテーブルが作成されるので、自分の場合、最初にnutch injectだけ動かして、その後テーブルをtruncateという作業を行った。

import

注意点は2点。

  • mapred ユーザーで実行する
  • エクスポートしたデータの指定方法はfile://で始める

具体的なコマンドは以下の通り。

[root@host ~]$ sudo -u mapred hbase org.apache.hadoop.hbase.mapreduce.Import webpage file:///data/export/webpage/

HBase 0.90.4のバグ?

データ移行とは直接関係ないけど、Nutch 2.1 + HBase 0.90.6(分散モード)で動作させる際、1つ問題があったので書いておく。

Nutch 2.1のパッケージにはhbase-0.90.4.jarが含まれているんだけどこれに問題があるみたいで、NutchからZooKeeperへの接続数が際限なく増えていき、最大数に達して異常終了する。

解決策は、hbase-0.90.6-cdh3u5.jar に入れ替えること。

詳しくはこの辺

まとめ

次回はチューニングとか、実運用に関連することを書こうかなと。