検索エンジンを作る(予定)その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 に入れ替えること。
詳しくはこの辺。
まとめ
次回はチューニングとか、実運用に関連することを書こうかなと。