最近在研究nutch,網(wǎng)上幾乎沒有一篇在window環(huán)境下能夠配置正確的文檔.今天一天的努力,終于配置成功了!現(xiàn)在將資料和配置過程整理如下.
1、安裝Cygwin
首先,到http://www.cygwin.com/官網(wǎng)上下在setup.exe安裝程序,下載后雙擊它,出現(xiàn)程序安裝的向?qū)Ы缑妫ㄈ鐖D1所示)。
點擊“下一步”后,安裝向?qū)б筮x擇Cygwin的安裝方式,如圖2所示:
圖示中共有三種安裝方式:
(1)Install from Internet:從Internet上下載并安裝軟件;
(2)Download Without Installing:從Internet上下載安裝的文件,但暫時不安裝;
(3)Install from Local Directory:從本地含有安裝文件的目錄進行安裝。
我們選擇第三項“Install from Inter”后,點擊“下一步”,如圖3所示:
安裝向?qū)б筮x擇Cygwin的安裝路徑,我們可以在“Root Directory”文本框中更改安裝路徑,點擊“下一步”,如圖4所示:
安裝向?qū)б筮x擇下載的Cygwin安裝文件的本地存儲路徑,可以在“Local Package Directory”中設(shè)置,點擊“下一步”,如圖5所示:
安裝向?qū)э@示出所要安裝的內(nèi)容列表,用戶可以根據(jù)自己的實際需要來決定安裝哪些程序。點擊循環(huán)箭頭圖標(biāo)后面的文字,可以更改安裝的方式,常用的方式有Default(表示只安裝缺省的安裝項)、Install(表示安裝全部程序,空間要求較大)、Reinstall(表示重新安裝程序)。推薦選擇“Install”方式,一步到位,以免后擾,不過用戶應(yīng)保證至少有2G以上的空間可供使用。點擊“下一步”后,就開始正式的安裝了(如圖6所示)。
最后出現(xiàn)如圖7所示的窗口,點擊“完成”后,Cygwin安裝完畢。
Nutch 的腳本都是用 Linux 的 Shell 寫的,所以在 Windows 平臺需要一個 Shell 解釋程 序。Cygwin 是一個在 Windows 下的模擬 Linux 系統(tǒng)程序 。
2、安裝Nutch
去http://mirror.vmmatrix.net/apache/lucene/nutch/下載到Nutch的最新版本,將其解壓到指定目錄中,如筆者是將其解壓到I:/nutch-1.1中。
3、測試Nutch命令
在運行Nutch的腳本命令前,需要設(shè)置一些環(huán)境變量。Cygwin提供了一個名為cygwin.bat的文件,通過它可以自動完成必需環(huán)境變量的設(shè)置。該文件可在cygwin所在的根目錄下找到,感興趣的讀者還可通過UltraEdit等編輯器打開該文件一查究竟。其實Cygwin安裝完成之后,會在Windows系統(tǒng)桌面生成一圖標(biāo),如圖8所示:
此圖標(biāo)就是cygwin根目錄下cygwin.bat文件的快捷方式,雙擊此圖標(biāo)將打開一類似DOS窗口。由于先前筆者將Nutch的壓縮包解壓至I:/nutch-0.7.1中,故在此命令窗口中輸入命令“cd /cygdrive/i/nutch-1.1”,讀者可根據(jù)自己的安裝路徑進行相應(yīng)的修改,然后使用命令“l(fā)s -l”可查看nutch-0.7.1中的所有子目錄及文件信息。執(zhí)行命令“bin/nutch”,如果讀者能看到如圖9所示的提示,那恭喜你,Nutch在Windows系統(tǒng)中的安裝已經(jīng)大功告成了!
cygwin 環(huán)境下 , 進入 windows 某個盤加cygdrive , cd /cygdrive/d/ 就相當(dāng)于進入 d 盤。在這里你使用命令時,注意路徑的正確性。
上面是講解了如何裝cygwin,在使用nutch前,這個cywin是必須要安裝的,且要進入到nutch的安裝目錄下,執(zhí)行bin/nutch命令成功后,nutch才能正常使用.
注意:在選擇cygwin的下載地址時選擇最上邊第一個地址下載比較快.
注意:在cygwin的安裝過程中如果出現(xiàn)斷網(wǎng),是可以重新接著上次的下載進度繼續(xù)下載的,重新點擊setup.exe,在
這里,選擇reInstall,則為接著上次的下載.
注意:在使用bin/nutch命令前,需要使用CD命令進入到nutch的安裝目錄下再使用.例如我下載nutch-1.1后,nutch-1.1的目錄如下.
那么首先執(zhí)行cd /cygdrive/c/Documents and Settings/Administrator/桌面/apache-nutch-1.1-bin/apache-nutch-1.1-bin,再執(zhí)行bin/nutch.
安裝完cygwin后,就可以在myecliPSe中配置nutch了,如下:
在Myeclipse中搭建Nutch開發(fā)環(huán)境
1以JavaProject形式搭建
1.1第一步:下載Nutch的壓縮包
到Nutch的網(wǎng)站上下載Nutch的壓縮包,這里以Nutch1.1為例。Nutch各版本的下載地址為http://archive.apache.org/dist/nutch/,進入該網(wǎng)頁后,找到apache-nutch-1.1-bin.tar.gz文件,將其下載到自己的電腦里。
1.2第二步:新建一個Java項目
打開MyEclipse,點擊File→New→JavaProject新建一個Java項目,輸入ProjectName如Nutch1.1,點擊Finish按鈕。如下圖所示。
1.3第三步:導(dǎo)入Nutch的代碼
將第一步下載的Nutch壓縮包解壓,解壓后的目錄結(jié)構(gòu)如下圖所示。
將src/java目錄下的整個org文件夾copy到Nutch1.1項目的src目錄下。
1.4第四步:導(dǎo)入Nutch的配置文件、Jar包、插件
在第三步解壓后的目錄下,找到conf、lib、plugins三個文件夾,將這三個文件夾copy到Nutch1.1項目的根目錄下(即與src目錄同級)。Copy完后,Nutch1.1項目的目錄結(jié)構(gòu)如圖所示。
1.5第五步:替換Nutch中Hadoop的核心包
官方版本的Hadoop是不支持Windows下的存取操作的,我們需要將其替換為自己修改過的Jar包。在Nutch1.1項目的lib目錄下,找到Hadoop的核心包(如:hadoop-0.20.2-core.jar),將其刪除,然后將自己的Jar包(hadoop-0.21.0-core.jar)copy到該目錄下。
注意:這一步,如果沒有修改過的包,則可以略過這一步,暫時不影響環(huán)境的配置的.
1.6第六步:在MyEclipse中為項目加載Jar包
在MyEclipse中刷新Nutch1.1項目,可以看到如下所示的目錄結(jié)構(gòu)。
我們會發(fā)現(xiàn)src目錄下有錯誤存在,這是因為盡管該項目的lib目錄下有Jar包,但是沒有將其加入到ClassPath變量中。下面來解決這個問題。
在Nutch1.1目錄上單擊右鍵→BuildPath→ConfigureBuildPath…將打開如下所示的對話框。
在Libraries選項卡里,點擊AddJARs…按鈕,將出現(xiàn)如下所示的對話框。
展開Nutch1.1目錄,展開lib目錄,將lib文件夾及其子文件夾下的全部Jar包選中,然后單擊OK按鈕,如下圖所示。
單擊OK按鈕后,將回到Libraries選項卡,此時該選項卡將如下所示。
最后,單擊Libraries選項卡里的OK按鈕,回到MyEclipse的主頁面,看看src目錄上的錯誤是不是消失了。
1.7第七步:在MyEclipse中為項目加載配置文件
同理,雖然conf目錄下已經(jīng)有配置文件了,但Java虛擬機仍不能識別它們,因為它們也沒有加入到ClassPath變量中。下面我們來將其加入。
在conf目錄上單擊右鍵→BuildPath→UseasSourceFolder。然后我們會發(fā)現(xiàn)conf目錄變成了一個“SourceFolder”,這樣conf目錄下的配置文件就被中加入到ClassPath變量中了。
1.8第八步:修改Nutch中的配置
Nutch中默認(rèn)的配置并不能使Nutch正常運行,需要修改幾個地方后才能使Nutch運行起來。
1.8.1修改nutch-default.xml
在conf目錄下找到nutch-default.xml文件,將其打開,找到http.agent.name配置項,如果該項的value值為空,則隨便加入一個值,然后保存。如下圖所示。
1.8.2修改crawl-urlfilter.txt
在conf目錄下找到crawl-urlfilter.txt文件,將其打開,找到#accepthostsinMY.DOMAIN.NAME配置項,將其下面的正則表達(dá)式+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/改為+^http://([a-z0-9]*\.)*。找到#skipURLscontainingcertaincharactersasprobablequeries,etc.配置項,如果其下面有-[?*!@=]形式的正則表達(dá)式,將其刪除,或?qū)?號改為+號。最后,保存所作的修改。如下圖所示。
此外,還可以修改nutch-site.xml這個文件的配置。(這里略去,不作修改)
1.9第九步:測試Crawl類,修正運行中的各種錯誤
經(jīng)過以上的操作,Nutch的開發(fā)環(huán)境的搭建就有可能大功告成了,現(xiàn)在我們就可以開始運行Nutch了。我們通過Crawl類來運行Nutch,運行時將出現(xiàn)兩種結(jié)果,一是順利地運行完成,二是程序被各種異常終止(即運行失敗)。如果出現(xiàn)第一種結(jié)果,恭喜你,Nutch的開發(fā)環(huán)境搭建成功;如果出現(xiàn)第二種結(jié)果,很抱歉,你可能離成功還有很遠(yuǎn),不過沒關(guān)系,你可以一步一個腳印,修正運行中的各個錯誤。
下面,按如下步驟來運行Nutch,修正運行中的各種錯誤。
1.9.1運行前的準(zhǔn)備工作
Nutch爬蟲運行時需要一個入口,即一個或若干個url,通常將url存放在一個txt文件中。因此,運行前需要有這樣的txt文件。
在Nutch1.1項目的根目錄下新建一個名為“testData”的文件夾,在該文件夾下新建一個名為“urls.txt”的文件,在urls.txt文件中寫入若干url,如下圖所示。
1.9.2打開Crawl類,配置運行參數(shù)
在MyEclipse中,展開src目錄,找到org/apache/nutch/crawl包下的Crawl.java類,雙擊打開。
在MyEclipse的工具欄上找到,點擊右邊的黑色小三角,再點擊RunConfigurations…,將打開一個對話框,如下圖所示。
點擊Arguments選項卡,如下圖所示輸入運行參數(shù)和虛擬內(nèi)存,點擊Apply按鈕,再點擊Close按鈕,返回主界面。
1.9.3運行Crawl類
打開Crawl類,點擊工具欄上左邊的小三角,程序開始運行起來,耐心等待程序執(zhí)行完成。
如果程序運行后,滿足以下幾個條件則認(rèn)為程序運行正常,開發(fā)環(huán)境搭建成功。如果不滿足以下的條件,則認(rèn)為程序運行失敗,需要修正各種錯誤。
①程序沒有被異常終止
②運行中沒有拋出較嚴(yán)重的異常
③運行結(jié)束時,控制臺出現(xiàn)類似以下的信息
④運行結(jié)束后,testData目錄下出現(xiàn)out文件夾,且out目錄下出現(xiàn)如下所示的子文件夾,并且各子文件夾中的文件要有數(shù)據(jù)
1.9.4修正錯誤,直至運行成功
如果上一步中,Crawl類運行成功,則此步可以跳過。
如果上一步中,Crawl類運行失敗,則要根據(jù)實際情況,一步一個腳印,碰到一個錯誤修正一個錯誤,直到Crawl類運行成功。
下面給出運行中常見的錯誤及其解決方法。
①java.lang.NoClassDefFoundError
這類異常是因為沒有找到相應(yīng)的類文件,通常是缺少Jar包。
以下圖的異常為例,該異常是因為缺少jackson的Jar包,因而找不到相應(yīng)的類文件。解決方法是:將jackson-core-asl-1.4.2.jar和jackson-mapper-asl-1.4.2.jar文件加入到lib目錄下,再通過MyEclipse加入Jar包的方法將這兩個Jar包加入到ClassPath變量中。
②Jobfailed!
Jobfailed是Nutch中最常見也是最復(fù)雜的問題,引發(fā)該異常的原因數(shù)不勝數(shù),解決方法應(yīng)視具體情況而定。遇到該問題時,通?梢园匆韵虏襟E來解決。
第一:檢查Hadoop的核心包是否替換,沒有則替換為自己修改過的Jar包,如:hadoop-0.21.0-core.jar。
第二:檢查nutch-defult.xml是否修改,以及是否修改正確。
第三:檢查crawl-urlfilter.txt是否修改,以及是否修改正確。
第四:以上三種方法仍然不能解決時,需要查看Hadoop的日志文件hadoop.log(該文件通常在項目的根目錄下,也可能在其他地方),來找出出現(xiàn)問題的具體原因。
下面是hadoop.log的一個片段,該片段說明了引起Jobfailed的一個原因:avro的某些類文件未找到。因此,說明我們還要在項目中加入avro的Jar包,如:avro-1.3.2.jar。
下面是hadoop.log的另一個片段,該片段說明了引起Jobfailed的另一個原因:OutOfMemoryError(內(nèi)存溢出錯誤)。這個錯誤說明運行的虛擬內(nèi)存太小或者根本就沒設(shè)置虛擬內(nèi)存,解決方法是在配置Crawl運行參數(shù)的對話框中正確設(shè)置虛擬內(nèi)存的大小。
③Inputpathdoesnotexist
這個異常說明輸入路徑不存在,即含有url的txt文件不存在。引起這個異常的原因有兩個,一個是沒有所需的txt文件,另一個是運行參數(shù)配置錯誤。解決的方法是首先檢查txt文件是否存在,然后檢查Crawl的運行參數(shù)是否如下圖的形式配置(注意斜杠和空格)。
④Toosmallinitialheap
Crawl運行時直接輸出上圖的信息時,說明虛擬內(nèi)存太小了,同時檢查虛擬內(nèi)存的配置,將其配置正確。(此時多為數(shù)字后面掉了m)
⑤⑥
1.10第十步:搭建完成,運行Nutch
經(jīng)過上面的操作,相信Crawl類可以成功運行了,直至Nutch開發(fā)環(huán)境的搭建終于大功告成了,F(xiàn)在,就可以利用Nutch來爬行互聯(lián)網(wǎng)了。
注:到這里就完了,我基本上是按照上面的步驟配置成功的.希望能夠?qū)Υ蠹矣兴鶐椭?有不正確的地方也希望提出來!最近由于忙實驗,趕論文,時間有限,希望大家見涼!
1.11查詢搜索:
nutch提供了類似google、baidu的網(wǎng)頁頁面,關(guān)閉tomcat服務(wù),在nutch-1.1/下找到nutch-1.1.war文件,放到C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat7.0/webapps目錄下,重新啟動tomcat服務(wù),則自動解壓出nutch-1.1,修改nutch-1.1/WEB-INF/classes/nutch-site.xml文件內(nèi)容如下:
<property>
<name>http.agent.name</name>
<value>sina</value>
</property>
<property>
<name>searcher.dir</name>
<value>D:/MyEclipse 8.5/Workspaces/Nutch-1.1/testData/out</value>
</property>
(value的值是爬行后的sina目錄位置)
注意:①nutch-1.2.war應(yīng)在爬完網(wǎng)頁再解壓②每次修改nutch-site.xml都需要重啟tomcat.
配置完成后,啟動tomcat,輸入http://localhost:8080/nutch-1.1,輸入關(guān)鍵字sina,就會看到結(jié)果了。
解決中文問題
查詢結(jié)果有時會出現(xiàn)亂碼,解決方法如下:
打開tomcat7.0目錄下的conf\server.xml,作如下修改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>