如果想要提高Nutch局域網(wǎng)抓取的速度,大家第一個想到肯定是-threads .但是那是錯誤的,如果只是單單增大線程數(shù),那根本于事無補(bǔ)。
通過下面這組測試,我們看看-threads 是否起作用。首先在本地apache2下建立兩個網(wǎng)站,寫一個簡單的Rakefile來幫助完成測試。設(shè)定depth=3,下面是Rakefile的內(nèi)容:
threads=1depth=3task:default => [:crawl]task:crawl => [:clean] do t=Time.now sh "bin/nutch crawl myurl -dir crawl -depth #{depth} -threads #{threads}" puts Time.now-tendtask:clean do sh "rm -rf crawl"endthreads的值分別為1,5,10 結(jié)果如下表:
線程數(shù) 時間 1 891.001462 5 889.560529 10 878.812949從上面表格可以看出,這根本一點(diǎn)作用都沒有。第一種提高速度的方法就是減少抓取之間的延遲時間,我們可以通過修改conf/nutch-default.xml中fetcher.server.delay 來減少延遲時間。
- fetcher.server.delay
- 抓取器在同一服務(wù)器的逐次請求所延遲的秒數(shù)
我們試試減小它的值為1.0(原先的值為5.0)。經(jīng)過測試,結(jié)果如下:
線程數(shù) 時間 1 482.807096 5 488.666853 10 486.67904顯然速度提高了,但是線程數(shù)還是起沒有作用,原因就在于conf/nutch-default.xml中fetcher.threads.per.host 配置為1。那么第二種方法就是同一時刻允許多個線程訪問同一主機(jī)。
- fetcher.threads.per.host
- 這個值允許同一時刻訪問一臺主機(jī)的最大線程數(shù)
如果這個配置為1,同一時刻只允許一個線程,啟動多少的線程都沒用。下面我們增大這個配置為5,測試結(jié)果如下:
線程數(shù) 時間 1 484.754918 5 384.201041 10 332.934009很明顯隨著線程數(shù)的增大,抓取速度也在增大。如果還想再提高速度的話,可以減小抓取之間的延遲時間。不過不是修改fetcher.server.delay ,而是修改fetcher.server.min.delay 。這個配置是設(shè)定抓取器在同一服務(wù)器的逐次請求所延遲最小的秒數(shù),這個值僅當(dāng)fetcher.threads.per.host 屬性值比1大時適用




