Nutch Crawler 工作流程及文件格式详细分析Crawler 和 Searcher 两部分被尽是分开,其要紧目的是为了使两个部分能够布地配置在硬件平台上,例如 Crawler 和 Searcher 分不被放置在两个主机上,如此能够极大的提升灵活性和性能。一、总体介绍: 1、先注入种子 urls 到 crawldb 2、循环:generate 从 crawldb 中生成一个 url 的子集用于抓取 fetch 抓取上一小的 url 生成一个个 segment parse 分析已抓取 segment 的内容 update 把已抓取的数据更新到原先的 crawldb 3、从已抓取的 segments 中分析出 link 地图 4、索引 segment 文本及 inlink 锚文本二、有关的数据结构: Crawl DB● CrawlDb 是一个包含如下结构数据的文件: ● CrawlDatum: ● Status: {db_unfetched, db_fetched, db_gone,linked, fetch_success, fetch_fail, fetch_gone} 爬虫 Crawler: Crawler 的工作流程包括了整个 nutch 的所有步骤--injector,generator,fetcher,parseSegment, updateCrawleDB,Invert links, Index ,DeleteDuplicates, IndexMerger Crawler 涉及的数据文件和格式和含义,和以上的各个步骤有关的文件分不被存放在物理设备上的以下几个文件夹里,crawldb,segments,indexes,linkdb,index 五个文件夹里。 那么各个步骤和流程是如何,各个文件夹里又是放着什么呢? 观看 Crawler 类能够明白它的流程./nutch crawl urls -dir ~/crawl -depth 4 -threads 10 -topN 2000 1、Injector injector = new Injector(conf); Usage: Injector 第一是建立起始 url 集,每个 url 都通过 URLNormalizers 、filter 和scoreFilter 三 个过程并标记状态。第一通过 normalizer plugin,把 url 进行标准化,例如 basic nomalizer 的作用有把大写的 url 标准化为小写,把空格去除等等。然后再通过的 plugin 是 filter,能够根据你写的正则表达式把想要的 url 留下来。通过两个步骤后,然后确实是把那个 url 进行状态标记,每个 url 都对应着一个 CrawlDatum,那个类对应着每个 url 在所有生命周期内的一切状态。细节上还有那个 url 处理的时刻和初始时的分值。 同时,在那个步骤里,会在文件系统里生成 如下文件 crawlDB\current\part-00000 那个...