Nutch1.7Generator源代码分析

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配置参数的值,默认不执行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值