1、初始化乙個configuration例項設定抓取工作配置;
2、設定一些預設抓取工作引數,比如程序數threads、抓取深度depth、抓取網頁數量topn;
3、建立抓取工作抓取到的網頁檔案的存放目錄(crawldb、linkdb、segments、indexes、index),用來存放原生網頁,以及網頁解析出的文字內容及其其它相關資料;
4、在抓取工作及其索引過程中,這通過初始化一些實現了這些操作的類的例項來完成的,例如:injector、generator、fetcher、parsesegment、crawldb、linkdb、indexer、deleteduplicates、indexmerger。
5、最後,就開始執行相關操作了,包括初始化crawldb、生成抓取工作列表、抓取網頁檔案、更新crawldb、倒排links、建立索引、複製索引檔案、合併索引檔案。
//初始化配置檔案
configuration conf = nutchconfiguration.createcrawlconfiguration();
jobconf job = new nutchjob(conf);
// urls存放目錄
path rooturldir = null;
path dir = new path("crawl-" + getdate());
//抓取執行緒數目
int threads = job.getint("fetcher.threads.fetch", 10);
//抓取工作遍歷深度
int depth = 5;
long topn = long.max_value;
string indexername = "lucene";
string solrurl = null;
for (int i = 0; i < args.length; i++) else if ("-threads".equals(args[i])) else if ("-depth".equals(args[i])) else if ("-topn".equals(args[i])) else if ("-solr".equals(args[i])) else if (args[i] != null)
}filesystem fs = filesystem.get(job);
//抓取工作的不同操作需要的五個目錄
path crawldb = new path(dir + "/crawldb");
path linkdb = new path(dir + "/linkdb");
path segments = new path(dir + "/segments");
path indexes = new path(dir + "/indexes");
path index = new path(dir + "/index");
path tmpdir = job.getlocalpath("crawl"+path.separator+getdate());
injector injector = new injector(conf);
generator generator = new generator(conf);
fetcher fetcher = new fetcher(conf);
parsesegment parsesegment = new parsesegment(conf);
crawldb crawldbtool = new crawldb(conf);
linkdb linkdbtool = new linkdb(conf);
// 初始化crawldb
injector.inject(crawldb, rooturldir);
int i;
for (i = 0; i < depth; i++)
//抓取網頁內容
fetcher.fetch(segs[0], threads, org.apache.nutch.fetcher.fetcher.isparsing(conf)); // fetch it
if (!fetcher.isparsing(job))
//更新crawldb
crawldbtool.update(crawldb, segs, true, true); // update crawldb
} if (i > 0)
else
// delete old index
if (fs.exists(index))
}//索引過程
indexer indexer = new indexer(conf);
indexer.index(indexes, crawldb, linkdb,
arrays.aslist(hadoopfsutil.getpaths(fstats)));
indexmerger merger = new indexmerger(conf);
if(indexes != null) );
fstats = fs.liststatus(indexes, hadoopfsutil.getpassdirectoriesfilter(fs));
//將索引目錄index 中的索引檔案合併後寫入到indexes 目錄中
merger.merge(hadoopfsutil.getpaths(fstats), index, tmpdir);
}}
}
Nutch 原始碼分析 1
org.apache.nutch.crawl.crawl類的主函式如下所示 應該知道,nutch查詢檔案系統是基於linux系統的機制的,所以提供啟動的命令與linux的shell命令很相似。public static void main string args throws exception c...
原始碼分析之LayoutInflater
簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...
原始碼分析之HashMap
首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...