注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

nutch分布式详解1( Injector)  

2010-10-24 20:57:30|  分类: java分布 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
初始抓取时,没有任何文件,只有几个待抓取的url站点信息。假设所有url站点存在rootUrlDir文件目录下(可以是一个或多个文件,每个文件一行一个url)。需要将这些

url导入到crawldb中去,以方便在下次generate时能够抓取这些网页。
   
    这里详细介绍导入函数injector的分布式过程。导入函数调用方式为:injector.inject(crawlDb, rootUrlDir)。

    整体过程包含两个MapReduce过程:

    (1)sortJob:把输入的url转换为crawlDatum格式;
   
    Input: urlDir
   
    Mapper:InjectMapper: <lineCounter, url> ---> <url,crawlDatum>
   
    Output:tempDir
   
    OutputFormat:SequenceFileOutputFormat
   
    分析:Map过程中,一行读取一个url,并将url站点封装成crawlDatum对象。每个url都经过urlNormalizers, filters,scfilters三个过程标记状态:

    urlNormailizes在这里为URLNormalizers.SCOPE_INJECT状态,将url正规化处理,如规范大小写等;

    filters由nutch-site.xml的“urlfilter.order”属性控制,默认值为空时加载所有的urlfilter,把一些不符合的url过滤掉(这里也可以自定义urlfilter,比如过滤某

些不需要抓取的站点);

    Scfilters由“scoring.filter.order”属性控制,默认值是空也是加载所有的score filter的injectedScore 函数;

    新构造的crawlDatum的status = STATUS_INJECTED,fetchInterval=30天,fetchTime=currentTime,score =1.0f。

    (2)mergeJob:将新产生的crawlDatum序列合并到currnet crawlDb中,crawldb中包含了所有抓取及未抓取的url对象信息,包括url信息、上次抓取时间、抓取时间间隔等,所有这些信息都封装在crawldatum对象中。

    Input:crawlDb,tempDir;

    Mapper: CrawlDbFilter <url,crawlDatum> -> <url,crawlDatum>

    InputFormat:SequenceFileInputFormat

    Output: newCrawlDb:以一个随机数为后缀的cawldb

    OutputFormat:MapFileOutputFormat (备注:MapFileOutputFormat与SequenceFileOutputFormat通用,见sequenceFileOutputFormat代码)

    Reducer: InjectReducer

    分析:Map过程中也可以经历了urlNormalizers, filters两个过程,分别由"crawldb.url.filters"及"crawldb.url.normalizers"两个Boolean属性控制,默认值为false。   

    Reduce过程即合并过程。如果newurl与crawlDb中的对象有重复的,则直接保留crawlDb中的crawlDatum;反之则将newurl添加到crawlDb中,但将status状态修改为STATUS_DB_UNFETCHED。

    Reduce完成之后,crawlDb合并成功,将新生成的newCrawlDb替换currentDb,并删除以前的currentDb。

    执行完毕之后,就生成了新的crawldb文件夹,该文件夹下会有current命名的文件。
  评论这张
 
阅读(1014)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016