您的位置:首页 > 其它

webhavest+nutch1.2抓数据,建索引流程

2011-06-07 18:02 162 查看
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小时内爬取分析建索引
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: