Nutch的索引代码解读(一)

关键字: nutch 索引
Nutch的索引代码解读(一)

Nutch的内部网增量缩影是可以通过recrawl脚本(nutch的wiki上有发布)进行增量更新,但是对于对于全网爬取的URL如何做到增量更新,目前来说还没有相关的方法,尤其是对于上TB级别数据的索引更新和合并,直接把Nutch似乎还有相当多的问题需要解决(比如分布式大索引分割、合并等等,在Nutch的mailing list上大家讨论了非常多,但还是没有一个合理的解决方案),因此,作者期望通过解读源码的方式来对Nutch的索引构建机制和源码做一个较为初浅的解读,以期通过修改解决Nutch的索引面临的问题,期望能得到广大网友的意见。
    考虑到笔者的需求是Nutch对于海量的数据的索引,因此基于集群的方式对Nutch的源码进行解读。
本文是针对Nutch1.0而写,Nutch1.0相比0.9更多的功能采用了Map/reduce算法结构,若不是先前对MapReduce有一番了解,看起来将是非常费解。
首先:补充一点最基础的知识,就是Nutch的文件目录所包含的内容:

crawldb目录下面存放下载的URL,以及下载的日期,用来页面更新检查时间。
linkdb目录存放URL的关联关系,是下载完成后分析时创建的,通过这个关联关系可以实现类似google的pagerank功能。
segments目录存储抓取的页面,下面子目录的个数与获取页面的层数有关系。     内含有6个子目录
    content:下载页面的内容
    crawl_fetch:下载URL的状态内容
     crawl_generate:待下载的URL的集合,在generate任务生成时和下载过程中持续分析出来
    crawl_parse:存放用来更新crawldb的外部链接库
    parse_data:存放每个URL解析出来的外部链接和元数据
    parse_text:存放每个解析过的URL的文本内容
index目录存放符合lucene格式的索引目录,是indexs里所有的索引内容合并后的完整内容,这里的索引文件的内容基本与lucene的索引文件一致,但多了.nrm文件,少了lucene的.f0文件,而且是非复合索引。
indexs目录存放每次下载的索引目录,存放part-0000到part-0003

1.定位crawl.java的index入口:
Java代码
indexer.index(indexes, crawlDb, linkDb, Arrays.asList(HadoopFSUtil.getPaths(fstats))); 

indexer.index(indexes, crawlDb, linkDb, Arrays.asList(HadoopFSUtil.getPaths(fstats)));
  此方法完成对Segments到Indexes的索引构建
  indexes-org.apache.hadoop.fs.Path luceneDir:是由lucene构建的Indexes存放的路径;
  crawlDb-org.apache.hadoop.fs.Path crawlDb:是爬取的crawlDb存放在Hadoop上的路径;

  linkDb-org.apache.hadoop.fs.Path, List<org.apache.hadoop.fs.Path> segments

转自: Nutch的索引代码解读(一)

你可能感兴趣的:(Nutch的索引代码解读(一))