2

Apache Nutch(v1.5.1)を使用して、特定のドメインですべてのWebサイトのインデックスを作成し始めました。私のドメインには膨大な数のWebサイト(数百万のオーダー)があり、プロセス全体の終了を待つのではなく、段階的にインデックスを作成する必要があります。

私はこれをnutchwiki(ここではhttp://wiki.apache.org/nutch/NutchTutorial/#A3.2_Using_Individual_Commands_for_Whole-Web_Crawling)で見つけました。アイデアは、スクリプトウィッチが、特定の量のデータ(たとえば、1000 URL)に対して、プロセスのすべてのステップ(クロール、フェッチ、解析など)を周期的に呼び出すようにすることです。

bin/nutch inject crawl/crawldb crawl/seed.txt

bin/nutch generate crawl/crawldb crawl/segments -topN 25
s1=`ls -d crawl/segments/2* | tail -1`
echo $s1

bin/nutch fetch $s1
bin/nutch parse $s1
bin/nutch updatedb crawl/crawldb $s1

bin/nutch generate crawl/crawldb crawl/segments -topN 25
s2=`ls -d crawl/segments/2* | tail -1`
echo $s2

bin/nutch fetch $s2
bin/nutch parse $s2
bin/nutch updatedb crawl/crawldb $s2

...

bin/nutch invertlinks crawl/linkdb -dir crawl/segments
bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb crawl/segments/*

私の質問は、この設定をNutchに直接指定して、彼にこのようなことを並行してより透明な方法で行わせる方法はありますか?たとえば、分離されたスレドでは?

答えてくれてありがとう。

アップデート

スクリプトを作成しようとしましたが(コードは上にあります)、残念ながら、リンクの反転フェーズでエラーが発生します。これは出力です:

LinkDb: starting at 2012-07-30 11:04:58
LinkDb: linkdb: crawl/linkdb
LinkDb: URL normalize: true
LinkDb: URL filter: true
LinkDb: internal links will be ignored.
LinkDb: adding segment: file:/home/apache-nutch-1.5-bin/crawl/segments/20120730102927
LinkDb: adding segment: file:/home/apache-nutch-1.5-bin/crawl/segments/20120704094625
...
LinkDb: adding segment: file:/home/apache-nutch-1.5-bin/crawl/segments/20120704095730

LinkDb: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist:
file:/home/apache-nutch-1.5-bin/crawl/segments/20120730102927/parse_data

Input path does not exist:
file:/home/apache-nutch-1.5-bin/crawl/segments/20120704094625/parse_data
...

ご協力いただきありがとうございます。

4

1 に答える 1

3

(十分な担当者がいる場合は、コメントとして投稿します)。

-depthスイッチは、クロールするサイトの全体的な深さではなく、各クロールを参照することに注意してください。つまり、depth = 1の2回目の実行では、すでにインデックス付けされているデータからさらに1レベル下がって、topNドキュメントで停止します。

したがって、データを完全に入力することを急いでいない場合は、同様の状況で、浅いナッチクロールステートメントを多数繰り返し実行することで多くの成功を収めています(小さい深さ(3-5)と-大きなシードリストからのtopN(100-200)変数)。これにより、各バッチで(depth * topN)ページのみがインデックスに登録され、インデックスは数分以内にURLの配信を開始します。

次に、通常、クロールを設定して(1.5 *初期クロール時間平均)秒ごとに起動し、リッピングさせます。当然のことながら、クロールごとにわずか1,000のドキュメントで、大規模なインフラストラクチャを通過するのに多くの時間がかかる可能性があり、(インデックス作成、一時停止時間、およびその他のオーバーヘッドの後)メソッドはスタック全体をクロールする時間を増やすことができます。

インフラストラクチャを介した最初の数回は、かなり悪いスローグです。ただし、アダプティブクロールアルゴリズムが開始され、再クロール時間が妥当な値に近づき始めると、パッケージは実際に配信を開始します。

(これは、nutch wikiで言及している「Web全体のクロール」方法にいくぶん似ています。これは、データを1,000ページのセグメントに分割するようにアドバイスしますが、初心者にとってははるかに簡潔で理解しやすいものです。)

于 2013-03-05T19:52:36.377 に答える