nutch LinkDb invert 详解

LinkDb

map :LinkDb 
    输入目录为segments目录里面所有segment下面的parse_data目录
    1 首先对key:url 如果配置filter和normalize 则进行filter和normalize
    2 如果url不为空 则分析他的外链,db.ignore.internal.links配置为true,如果源链接和外链都是同一个host name 则忽略
    3 如果配置filter和normalize ,对外链进行,则进行filter和normalize
    4 写入,key:外链的url,value:源url

reduce LinkDbMerger key:Text  url value:Inlinks,入链
     1   合并相同的key的value.为list 这里有个db.max.inlinks这个配置最大的外链数目,如果超过这个,则其余的抛弃。
      2 写入 输出目录为    Path newLinkDb =
      new Path("linkdb-" +
               Integer.toString(new Random().nextInt(Integer.MAX_VALUE)));

   
如果存在linkdb则需要合并
合并的job:createMergeJob
map :LinkDbFilter 输入目录上个job的输出 ,linkdb/current
     1  首先对key:url 如果配置filter和normalize 则进行filter和normalize
     2  如果key 不为空,遍历value,对每个value 也是url,如果配置filter和normalize 则进行filter和normalize ,如果不为空加入Inlinks,,如果Inlinks 不为空写入key:Text url,value:Inlinks

reduce: LinkDbMerger  同job1

LinkDb.install(job, linkDb);  替换原来的linkdb。如果linkdb/old 存在,则删除,把linkdb/current  重命名为linkdb/old ,把上个job的输出变成linkdb/current,删除linkdb/old
    linkdb/old

猜你喜欢

转载自chengqianl.iteye.com/blog/1597507