k4200’s notes and thoughts

Programmer side of k4200

検索エンジンを作る(予定)その2 〜 Nutchについて少し解説

その3はこちら

概要

前回はNutch + HBaseでクローラーを動かすところまでを書いた。

今回はNutchの動作の仕組み、起動オプション、設定項目をちょっと解説。

(理解が浅い or 間違っている箇所も多いと思うので、何かあれば指摘して頂けると助かります)

Nutchの動作の仕組み

このブログ記事を見てもらえば大体分かると思う、などと言っちゃうと身も蓋もないし、英語が苦手な方もいるかもしれないので若干補足。


Nutchはいくつかのフェーズに分かれていて、それぞれNutch起動時のサブコマンド名になっている。

  • inject
  • generate
  • fetch
  • parse
  • updatedb
inject

前回seedについて少し説明したが、injectフェーズではそのseed URLが初期データとしてDB(HBaseやMySQL)に投入され、以降のフェーズの元データとなる。

generate

injectで投入されたURLに_gnmrk_というマークが付けられて、「バッチID」が生成される。以降のフェーズではこのバッチID単位で処理される。

fetch

その名の通り、Webページを取ってくる。処理対象のURLはgenerateで処理されたもの。

parse

これもその名の通り、HTMLの内容をパースし、以下の様な内容が作成される。

  • ページ内のテキスト
  • 外向けのリンクのリスト
updatedb

パースした内容を元に、DBを更新する。

ページAからページB, C, Dへのリンクが張られていたとしたら、それらのページが次回のfetchの対象となる。

(crawl)

crawlというサブコマンドを実施すると、上のフェーズが一気に実施される。また、depthを指定することで、リンクをいくつ辿るかが設定できる。depthを大きくするとクロールに非常に時間がかかるので注意(というか終わらない場合も)。

depthのデフォルトは昔は5だったみたいだけど、今も一緒だろうか?RTFSですかね。

コマンドラインオプション

代表的なのをいくつか説明しようと思ったら、一覧ページが存在する事に気づいたので省略。

Webで検索して出てくる情報は1.xのものが多く、そのまま実行しても動かない事が多いので、まずは上の対応表で確認すると良い。

Nutchの設定項目(前回説明していないの)

db.ignore.external.links

nutch-site.xml に以下のように設定すると、外部サイトへのリンクは辿らなくなる。

  <property>
    <name>db.ignore.external.links</name>
    <value>true</value>
  </property>

この場合、seedに記載したURLのドメインしか検索されない。イントラネットの検索や、特定のサイトの検索の場合に使用する。

User-Agent関連

クロールするときのUser-Agentヘッダを自由に変えられる。"k4200 super cool bot"みたいな厨二っぽいのでもいいし、Googleとかのボットと同じにしてもいいし、Chromeとかを偽装してもよし。それぞれのメリット・デメリットについては省略。

チューニング関連

現在調査中。ある程度調べたらまとめてエントリーにするかも・・・

まとめ

次回はSolr関連かHBase周りのどちらかを書く予定。

その3はこちら