如何在爬行时制作Apache Nutch索引

时间:2012-07-30 07:38:32

标签: nutch

我开始使用Apache Nutch(v1.5.1)索引某个域下的所有网站。 我的域名中有大量的网站(按照数百万的顺序),我需要逐步索引它们,而不是等待整个过程的结束。

我在nutch wiki(这里是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并让他以平行且更透明的方式做这些事情?例如关于分离的threds?

感谢回答。

更新

我试图创建脚本(代码在上面)但不幸的是我在反向链接阶段出错了。这是输出:

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
...

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

(如果我有足够的代表,我会将其作为评论发布)。

请记住,-depth开关指的是EACH CRAWL,而不是它将抓取的网站的整体深度。这意味着第二次深度= 1将从已经索引的数据下降一个MORE级别并停在topN文档。

所以,如果你不急于完全填充数据,我通过执行大量重复的浅层 nutch crawl 语句在类似的情况下取得了很大的成功(使用来自大种子列表的smallish -depth(3-5)和-topN(100-200)变量。这将确保在每个批次中仅索引(深度* topN)页面,索引将在几分钟内开始提供URL。

然后,我通常会设置爬网以触发每个(1.5 *初始爬网时间平均值)秒并让它翻录。可以理解的是,每次爬网只需要1,000个文档,它可能需要花费大量时间来完成大型基础架构,并且(在索引之后,暂停时间和其他开销)该方法可以倍增爬行整个堆栈的时间。

最初几次通过基础设施,这是一个非常糟糕的口号。然而,随着自适应爬行算法开始启动,重新爬行时间开始接近合理的值:包开始真正交付。

(这有点类似于你在nutch wiki中提到的“whole web crawling”方法,它建议你将数据分成1,000个页面段,但对初学者来说更简洁易懂。)