您的位置:首页 > 编程语言

Nutch1.7学习笔记4:Generator源代码分析

2013-11-30 09:38 225 查看
Nutch1.7学习笔记4:Generator源代码分析
作者:雨水,时间:2013-11-14博客地址:http://blog.csdn.net/gobitan
Generator分析

Generator的功能主要是将注入的URL按照一定的规则生产一系列CrawlDb的子集。这里的规则包括:抓取时间是否符合要求,是否符合设定过滤规则,根据页面评分进行排序,根据URL的host/ip/domain划分子集,是否超过设定的generate最大值(就是Crawl命令中的topN值)等。

generate方法主要包括三个job的执行:

第一个job的map和reduce均由内部类Selector类实现,另外还包含了Partitioner类的getPartition方法。

map方法所干的活:

根据URLFilters对url进行过滤,并比较抓取时间看是否符合要求,过滤掉低于generate.min.score参数设定分数值的URL,然后计算url的评分并按照评分降序排列。

分别对应下面代码行:

filters.filter(url.toString())

schedule.shouldFetch(url, crawlDatum, curTime)

scfilters.generatorSortValue(key, crawlDatum, sort);

getPartition方法所干的活:

该接口最终由URLPartitioner类实现,主要是对URL的host/domain/Ip把URL划分成很多子集,这样对后面的抓取有好处。比如可以避免对同一个站点的多个线程同时发起请求。

reduce所干的活:

判断产生的URL数量是否超过命令行输入中的topN值,如果超过了就停止。其他一些参数的限制,如:generate.max.count。输出为<Text,SelectorEntry>作为中间结果。

 

第二个job的map由SelectorInverseMapper类实现,而reduce方法由PartitionReducer类实现。具体功能:TODO,需进一步分析!

第三个job的map和reduce都由CrawlDbUpdater实现。该任务是否执行取决于主要generate.update.crawldb配置参数的值,默认不执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: