Posted on 2009-09-05 17:00
泰仔在线 阅读(1521)
评论(1) 编辑 收藏 所属分类:
Java 相关
关键字: 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的索引代码解读(一)