Nutch爬行给出深度='N'和循环爬行N次与深度='1'之间的差异

时间:2012-07-12 08:03:58

标签: hadoop nutch

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

请在下面找到伪代码:

案例1 :Nutch在Hadoop上抓取,深度= 3。

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

列出nutchArgsList = new ArrayList();

nutchArgsList.add( “ - 深度”);

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( “ - 深度”);

nutchArgsList.add(Integer.toString(1)); // 注意我已将深度设为1

< ...其他nutch args ...>

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

}

当我在循环中爬行多次深度时,我得到一些网址丢失(数据库未获取)。

我在独立的Nutch上尝试了这个,我在深度为3的情况下运行3次,在深度为1的同一网址上运行3次。我比较了crawldb和url的区别仅为12.但是当我使用toolrunner在Hadoop上做同样的事情时我正在获得1000个url作为db_unfetched。

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

另外请让我知道为什么差异是巨大的,当我使用toolrunner在Hadoop上做这个,而在独立的Nutch上做同样的事情。

先谢谢。

1 个答案:

答案 0 :(得分:0)

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

我建议使用高(至少1000)“-topN”而不是default value of 5来运行抓取。

这类似于我的回复here

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