【问题标题】:Difference between Nutch crawl giving depth='N' and crawling in loop N times with depth='1'Nutch 爬行给出深度='N' 和在循环中爬行 N 次深度 ='1' 之间的区别
【发布时间】:2021-04-05 16:24:08
【问题描述】:

我的问题背景:我在 Hadoop0.20.203 上运行 Nutch1.4。我在 Nutch 段上执行了一系列 MapReduce 作业以获得最终输出。但是在运行 mapreduce 之前等待整个爬网发生会导致解决方案运行更长时间。我现在在转储段后立即触发段上的 MapReduce 作业。我通过给定深度 = 1 在循环中运行爬网('N = 深度'次)。当我在循环中以深度 1 爬 N 次与给定深度 N 的爬网时,我会丢失一些网址。

请看下面的伪代码:

案例 1:在 Hadoop 上进行 Nutch 抓取,深度为 3。

// 创建列表对象来存储我们要传递给 NUTCH 的参数

List nutchArgsList = new ArrayList();

nutchArgsList.add("-depth");

nutchArgsList.add(Integer.toString(3));

<... nutch>

ToolRunner.run(nutchConf, new Crawl(), nutchArgsList.toArray(new String[nutchArgsList.size()]));

案例2:在深度='1'的情况下循环爬取3次

for(int depthRun=0;depthRun

// 创建列表对象来存储我们要传递给 NUTCH 的参数

List nutchArgsList = new ArrayList();

nutchArgsList.add("-depth");

nutchArgsList.add(Integer.toString(1)); //注意我在这里给深度为1

<... nutch>

ToolRunner.run(nutchConf, new Crawl(), nutchArgsList.toArray(new String[nutchArgsList.size()]));

}

当我在循环中爬行的次数与深度一样多时,我的一些 url 丢失(db unfetched)。

我在独立的 Nutch 上尝试过这个,我在深度 3 上运行 3 次,在深度 1 的相同 url 上运行 3 次。我比较了 crawldb 和 urls 差异只有 12。但是当我使用 toolrunner 在 Hadoop 上做同样的事情时,我我得到了 1000 个 url 作为 db_unfetched。

据我所知,Nutch 触发循环爬行的次数与深度值一样多。请提出建议。

另外,请告诉我为什么我在 Hadoop 上使用 toolrunner 执行此操作与在独立 Nutch 上执行相同操作时差异巨大。

【问题讨论】:

    标签: hadoop nutch


    【解决方案1】:

    我发现 Nutch 获取的行为在独立运行(直接到硬盘)并与 Hadoop 集群集成时会发生变化。 Hadoop 集群的生成器分数过滤似乎要高得多,因此“-topN”设置需要足够高。

    我建议使用高(至少 1000 个)“-topN”而不是 default value of 5 来运行您的爬网。

    这类似于我的回复here。

    这样做之后,我发现我的 Nutch 在单机上爬行,HDFS 开始更好地排队。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多