我的问题背景:我在 Hadoop0.20.203 上运行 Nutch1.4。我在 Nutch 段上执行了一系列 MapReduce 作业以获得最终输出。但是在运行 mapreduce 之前等待整个爬网会导致解决方案运行更长时间。我现在在转储段后立即触发段上的 MapReduce 作业。我通过给出深度 = 1 在循环中运行爬行('N = 深度'次)。当我在循环中以深度 1 爬行 N 次与爬行给出深度 N 时,我得到一些 URL 丢失。
请在下面找到伪代码:
案例 1:在 Hadoop 上进行 Nutch 爬行,深度 = 3。
// 创建列表对象来存储我们要传递给 NUTCH 的参数
列表 nutchArgsList = new ArrayList();
nutchArgsList.add("-depth");
nutchArgsList.add(Integer.toString(3));
<...其他 nutch args...>
ToolRunner.run(nutchConf, new Crawl(), nutchArgsList.toArray(new String[nutchArgsList.size()]));
案例2:在深度='1'的情况下在循环中爬行3次
for(int depthRun=0;depthRun< 3;depthRun++) {
// 创建列表对象来存储我们要传递给 NUTCH 的参数
列表 nutchArgsList = new ArrayList();
nutchArgsList.add("-depth");
nutchArgsList.add(Integer.toString(1)); //注意我在这里给深度为1
<...其他 nutch args...>
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网址为 db_unfetched。
据我所知,到目前为止,Nutch 触发循环爬行的次数与深度值一样多。请建议。
另外请让我知道为什么当我在 Hadoop 上使用 toolrunner 执行此操作时与在独立 Nutch 上执行相同操作时差异很大。