nu tch 分布式详解 1( Injector) 初始抓取时,没有任何文件,只有几个待抓取的 url 站点信息。假设所有 url 站点存在 rootUrlDir 文件目录下(可以是一个或多个文件,每个文件一行一个 url)。需要将这些 url 导入到 crawldb 中去,以方便在下次 generate 时能够抓取这些网页。 这里详细介绍导入函数 injector 的分布式过程。导入函数调用方式为:injector.inject(crawlDb, rootUrlDir)。 整体过程包含两个 MapReduce 过程: (1)sortJob:把输入的 url 转换为 crawlDatum 格式; Input: urlDir Mapper:InjectMapper: ---> 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 -> InputFormat:SequenceFileInputFormat Output: newCrawlDb:以一个随机数为后缀的cawldb OutputFormat:MapFileOutputFormat (备注:MapFileOutputFormat 与SequenceFileOutputFormat 通用,见sequenceFileOutputFormat 代码) Reducer: InjectReducer 分析:Map 过程中也可以经历了urlNormalizers, filters 两个过程,分别由"crawldb.url.filters"及"crawldb.url.normalizers"两个Boolean 属性控制,默认值为false。 Reduce 过程...