Posted on 2009-09-05 17:00
泰仔在線 閱讀(1528)
評論(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的索引代碼解讀(一)