【发布时间】: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 上执行相同操作时差异巨大。
【问题讨论】: