【问题标题】:How to make Apache Nutch indexing while crawling如何在爬行时制作 Apache Nutch 索引
【发布时间】:2012-07-30 07:38:32
【问题描述】:

我开始使用 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 中指定这个设置,让他以一种平行且更透明的方式来做这些事情?例如在分离的线程上?

感谢您的回答。

更新

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

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

感谢您的帮助。

【问题讨论】:

    标签: nutch


    【解决方案1】:

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

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

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

    然后,我通常将抓取设置为每(1.5* 平均初始抓取时间)秒触发一次,然后让它抓取。可以理解,每次爬取仅 1,000 个文档,通过大型基础架构可能需要大量时间,并且(在索引、暂停时间和其他开销之后)该方法可以成倍地爬取整个堆栈的时间。

    最初几次通过基础设施,这是一个非常糟糕的过程。然而,随着自适应抓取算法开始发挥作用,并且重新抓取时间开始接近合理值:包裹开始真正交付。

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

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多