如何在爬行时创建Apache Nutch索引

如何在爬行时创建Apache Nutch索引,nutch,Nutch,我开始使用ApacheNutch(v1.5.1)为某个特定域下的所有网站编制索引。 在我的域中有大量的网站(以百万计),我需要一步一步地索引它们,而不是等待整个过程的结束 我在nutch wiki(这里)中发现了一些应该有用的东西。这个想法是让一个脚本对特定数量的数据(例如1000个URL)周期性地调用我流程的每一个步骤(爬网、获取、解析等等) bin/nutch inject crawl/crawldb crawl/seed.txt bin/nutch generate crawl/craw

我开始使用ApacheNutch(v1.5.1)为某个特定域下的所有网站编制索引。 在我的域中有大量的网站(以百万计),我需要一步一步地索引它们,而不是等待整个过程的结束

我在nutch wiki(这里)中发现了一些应该有用的东西。这个想法是让一个脚本对特定数量的数据(例如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中指定这个设置,让他以一种平行的、更简洁的方式来做这些事情?例如在分离的THRED上

谢谢你的回答

更新

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

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
...
感谢您的帮助。

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

请记住,-depth开关指的是每次爬网,而不是它将爬网的站点的总深度。这意味着第二次运行的depth=1将从已经索引的数据再下降一级,并在topN文档处停止

因此,如果您不急于完全填充数据,我已经在类似的情况下通过执行大量重复的浅nutch crawl语句(使用小深度(3-5)和-topN(100-200)变量)从大型种子列表中获得了很多成功。这将确保每个批中只有(depth*topN)页面被索引,并且索引将在几分钟内开始传递URL

然后,我通常将爬网设置为每(1.5*初始爬网时间平均值)秒触发一次,然后让它撕裂。可以理解的是,每次爬网仅1000个文档,需要花费大量时间才能通过大型基础结构,并且(在索引、暂停时间和其他开销之后)该方法可以使整个堆栈的爬网时间成倍增加

最初几次通过基础设施,这是一个相当糟糕的过程。然而,随着自适应爬网算法开始生效,重新爬网时间开始接近合理值:包开始真正交付

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