crawldb目录下面存放下载的URL,以及下载的日期,用来页面更新检查时间
linkdb目录存放URL的关联关系,是下载完成后分析时创建的
segments目录存储抓取的页面,下面子目录的个数与获取页面的层数有关系
里面有6个子目录
content,下载页面的内容
crawl_fetch,下载URL的状态内容
crawl_generate,待下载的URL的集合,在generate任务生成时和下载过程中持续分析出来
crawl_parse,存放用来更新crawldb的外部链接库
parse_data,存放每个URL解析出来的外部链接和元数据
parse_text,存放每个解析过的URL的文本内容
crawl 使用webhavest 爬取数据
//伪代码
//循环crawl/au、crawl/hk、crawl/cn、crawl/hk、之类的地区文件
//列如crawl/hk
for(){
获得/crawl/hk/crawl/website.** 以website开头的文件个数,从中获得爬取URL及深度
加载hadoop文件系统中的配置文件nutch-default.xml之类的配置文件
删除上次建索引时创建的文件crawl/hk/crawleroutput
crawl/hk/linkcrawleroutput
crawl/hk/classifieroutput
crawl/hk/dbwriteroutput
加载本地工程目录中/crawl/hk/conf、
/crawl/hk/crawl、
/crawl/hk/frontpage、
/crawl/hk/linkpage 复制到本地tmp文件下
爬取frontpage
传入webhavest爬取解析数据的xml文件位置
产生crawl/hk/crawleroutput 内有根据URL及XML配置过滤出来的有效数据
爬取linkpage
传入crawl/hk/crawleroutput
产生crawl/hk/linkcrawleroutput 内有详细页面的有效数据
JobClassifier
传入linkcrawleroutput
把其中的数据通过/crawl/hk/conf中的XML解析成代号, 如location通过location.xml解析成地点编号
产生classifieroutput
****以上步骤中,将本地工程目录中的crawl/下的各个地区的配置文件复制到hadoop文件系统中,本地tmp文件中
****在每个地区文件目录下产生了 crawleroutput
linkcrawleroutput
classifieroutput
****进入sh命令步骤
//第二步
先删除joburlwriteroutput
传入(user/hadoop/crawl/hk/classifieroutput,/user/hadoop/joburlwriteroutput)
通过URLwrite类(就是把classfileroutput中的数据取出,再以键值对的形式保存到)
产生/user/hadoop/joburlwriteroutput
//第三步
传入(joburlwriteroutput,/user/hadoop/crawl.demo/crawldb)
通过Injector类把数据注入到/user/hadoop/crawl.demo/crawldb文件中
产生/user/hadoop/crawl.demo/crawldb
//第四步
传入(/user/hadoop/crawl.demo/crawldb,/user/hadoop/crawl.demo/segments)
通过Generator类(产生segments)
产生/user/hadoop/crawl.demo/segments
获取segments下最新的文件
通过Fetcher类
****在fetcher这步时很耗时间
//在把segments下最新的文件
//通过CrawlDb类(nutch会自动通过segments更新一些数据,因为数据已经通过webhavest拿到,所以不需要这步操作)
//第五步
传入(/MERGEDsegments,-dir,/segments)
通过SegmentMerger类 把segments目录下的多个 合并到 MERGEDsegments
产生MERGEDsegments
然后把segments目录下的文件删除
把产生的MERGEDsegments改名为segments
//第六步
传入(/linkdb,crawl.demo/segment/*)
通过LinkDb类
产生linkdb
//第七步
先把/NEWindexes删除掉
传入(/NEWindexes,/crawldb,/linkdb,/segment/*)
通过Indexer类
产生NEWindexes
//第八步
传入(/NEWindexes)
通过DeleteDuplicates类
//估计应该是nutch自带的去重复
//第九步
传入(/index,/NEWindexes)
通过IndexMerger
产生/index
删除老的index
把新的NEWindexes重命名index
****这里有点情况
因为之前把SH命令改为JAVA代码的时候,产生索引的位置NEWindexes,老的索引文件index,合并之后的索引index(有可能被命名为indexs)
总之这一步就是把老索引与新建索引合并,然后把合并之后的索引名改为index,其他的文件该删的删,改名的改
更新机群的tomcat下的web.xml文件
}
//以上步骤,需要修改为多线程方式,
按每个地区生成一个线程,从一到九步走完,每个地区每次生成一个该地区的新索引和segment
再一个线程无限读取每个地区生成的新索引,只要生成完毕,就把新的索引合并到hadoop文件系统中的另外一个地方,用于索引
而且整个流程都有很大的优化空间,预计想达到的效果为:要抓取的页面最新数据可以在3小时内爬取分析建索引