Heritrix 初步优化(应用ELFHash优化线程数量)

Heritrix 初步优化

一. 应用ELFHash 算法优化开启线程策略

0.   在默认的情况下,Heritrix使用HostnameQueueAssignmentPolicy来产生key值,而这个策略是用hostname作为key值的,因此一个域名下的所有链接都会被放在同一个线程中去。如果对Heritrix分配URI时的策略进行改进,利用ELFHash“可执行链接格式”(Executable and Linking Format,即ELF)算法把url尽量平均分布到各个队列中去,就能用较多的线程同时抓取一个域名下的网页,速度将得到大大的提高。具体算法介绍请到算法分类查看。

1.       复制org.archive.crawler.frontier.HostnameQueueAssignmentPolicy 更名为org.archive.crawler.frontier.ELFHashQueueAssignmentPolicy。添加方法:


private long  ELFHash(String str){
      long hash=0;
      long x=0;
      for(inti=0;i<str.length();i++){
           hash = (hash << 4 )+str.charAt(i);
           if((x= hash &0xF000000L) != 0){
                hash ^= x>>24;
                hash &= ~x;
           }
      }
      return hash& 0x7FFFFFFFL;
}
然后在71行的else分支替换成:


    String uri = cauri.getUURI().toString();
         long key =ELFHash(uri);
         candidate= String.valueOf(key%100); //控制好一百条以内的线程


2. 替换获取key的策略

在org.archive.crawler.frontier.AbstractFrontier293行 替换更改的类

在heritrix.properties 也替换更改的类,每次换行均要加“\等号后面黑色字体是无效。

org.archive.crawler.frontier.AbstractFrontier.queue-assignment-policy= org.archive.crawler.frontier.ELFHashQueueAssignmentPolicy \
    org.archive.crawler.frontier.IPQueueAssignmentPolicy \
    org.archive.crawler.frontier.BucketQueueAssignmentPolicy \
    org.archive.crawler.frontier.SurtAuthorityQueueAssignmentPolicy \
    org.archive.crawler.frontier.TopmostAssignedSurtQueueAssignmentPolicy


3. 修改判断爬虫是否考虑robots协议的抓取

在org.archive.crawler.prefetch.PreconditionEnforcer的considerRobotsPreconditions方法,改为return false。


4. 重新建立job。不能用已经存在的job。因为之前当新建一个job 的时候会把相关的配置记录(不仅仅是前端显示的配置)在jobs的order.xml中。所以,当你用已经存在的job复制出新的job会出现异常:

2015-12-0910:46:46.024 警告 thread-10org.archive.crawler.settings.CrawlSettingsSAXHandler.handleValueError() Valuenot in legal values list
 Attribute: 'frontier:queue-assignment-policy'
 Value:    'org.archive.crawler.frontier.AbstractFrontier'
 File:     'file:/F:/lucene/myheritrix/jobs/souhu2-20151209103025046/order.xml',line: 79, column: 100

5.效果展示:

前提:抓取同一个主题

---------------------------------------------------------------------------------优化前(针对同一个主题)------------------------------------------------------------------------------------------------------------------

 





-------------------------------------------------------------------------------------------优化后----------------------------------------------------------------------------------------------------------





 

 

 

 

 

 

 

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------优化后(针对同一个主题)--------------------------------------------------------------------------------------------------------



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值