検索エンジンを作る(予定)その1 〜 Nutch + HBaseのクローラーを動かす
その2はこちら。
目的
個人的に興味があって、ある領域に特化した検索エンジンみたいなのを作ろうとしている。
当面の目的としては、以下のような事をやる。
- 対象のサイト(ある領域に関連するサイト)をクロールして保存
- クロールしたページから必要なデータを抜き出して、DB(必ずしもRDBMSとは限らない)を作成し、以下のような検索が出来るようにする
- カテゴリ等をドリルダウンして、対象ページを絞る
- キーワード検索
今回はNutchとHBaseのインストール、実行くらいまで書く予定。
アーキテクチャ
ちょっと調べて、以下のようにする事にした。
環境
VPSを使っているけど、メモリが1Gだと動作しなかった。2Gだと大丈夫。
- OS: CentOS 6.3 64bit
- Java: OpenJDK 1.6.0 (java -version -> "1.6.0_24")
- Apache Nutch 2.1
- Apache HBase 0.90.6
インストール
HBase
Nutch 2.1は、今のところHBase 0.90系じゃないと動かないので、0.90.6を使用。
インストールはこの辺を参考に。特にはまるポイントはないと思う。
自分は、何となくhbase専用のユーザーを作成して、その権限で動かしているけど、皆がどうしてるかは不明。
2013/2/6 追記:以下2点を変更。
Nutch
Nutchに関してはこちらのチュートリアルに従った。
こちらもそんなに難しいところはないけど、若干不親切なところがあるので、いくつか補足しつつ説明。
まずは conf/nutch-site.xml を修正。自分の所は以下の様な感じ。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>storage.data.store.class</name> <value>org.apache.gora.hbase.store.HBaseStore</value> <description>Default class for storing data</description> </property> </configuration>
次に、ivy/ivy.xml を修正。変更点は、コメントアウトされている以下の行を有効化するだけ。
<dependency org="org.apache.gora" name="gora-hbase" rev="0.2.1" conf="*->default" />
後は、conf/gora.properties を修正。こちらのファイルは大きいので、diffを以下に示す。
[nutch@v157-7-129-204 apache-nutch-2.1]$ diff -u conf/gora.properties.bak conf/gora.properties --- conf/gora.properties.bak 2013-01-02 12:10:08.210231483 +0900 +++ conf/gora.properties 2013-01-02 12:11:08.148910033 +0900 @@ -13,8 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +gora.datastore.default=org.apache.gora.hbase.store.HBaseStore #gora.datastore.default=org.apache.gora.mock.store.MockDataStore -#gora.datastore.autocreateschema=true +gora.datastore.autocreateschema=true ############################### # Default SqlStore properties #
これで準備完了。
あとは ant を実行すると、runtime/local 以下に色々ファイルが作成される。
Nutchの設定
あともうちょい。
seedの設定
Nutchは、seedに書かれているURLを最初に取りに行って、そこからリンクを貼られているサイトを順々に取っていく、という感じの仕組みになっている。
runtime/local/urls というディレクトリを作成して(名前はurlsじゃなくても良さそうだけど、変える理由もないので)、その下に seed.txt というファイルを作成する。seed.txt は以下の通り、クロールの起点となるサイトのURLを書く。多分、1行1URLで複数書いても良いはず。
http://d.hatena.ne.jp/k4200/
これでとりあえずは動く状態になったんだけど、いくつか設定変更等を実施する。
file.content.limit の値を増やす
クローラーが取ってくるHTMLのサイズがこの値より大きい場合には切り詰められてしまう。デフォルトだと64KBで問題無さそうだが、UTF-8の文字列の場合、アルファベット以外は \uxxxx という風にエンコードされるため、実際のファイルサイズが30KB程度でも、保存する時には64KBを超えてしまう。
ということで、runtime/local/conf/nutch-site.xml に以下の記述を追加する(256KBにしているが、これより大きくしたい場合は適宜値を変更する)。
<property> <name>http.content.limit</name> <value>262144</value> </property> </configuration>
実行
以下の通り実行すると、クロールが始まるはず。
$ cd runtime/local $ bin/nutch crawl
うあたあー。
まとめ
上の手順を見れば分かる通り、分かってしまえば動かすのは難しくないけど、情報が少ないのでハマると大変。NutchのMLは、質問するとすぐ返信が返ってくる親切でいい感じ。
次回は、今回説明していない細かい設定項目か、取得したデータの利用とかについて書こうかと。
その2はこちら。