0

我的问题背景:我在 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 上执行相同操作时差异很大。

4

1 回答 1

0

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

我建议使用高(至少 1000)“-topN”而不是默认值 5运行您的爬网。

这与我在这里的回复类似。

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

于 2012-07-28T00:38:51.620 回答