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

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小时内爬取分析建索引

 

你可能感兴趣的:(webhavest+nutch1.2抓数据,建索引流程)