nutch-1.0 的分佈式查詢部署

nutch -1.0 的分佈式 查詢部署

    nutch-1.0集成了hadoop的mapreduce 實現分佈式爬蟲方式,抓取的網頁及索引等都存放在HDFS上,但hdfs 用於查詢是不切實際的,所以建議copy到本地 之後做搜索 查詢。但如果索引文件 很多,索引數據 量大,在一臺機器上部署查詢勢必很慢,這時可以考慮分佈式查詢方式,將索引分散在多個機器中;

下面是分佈式查詢方式的部署方式:

首先定義兩點:
1. search-servers.txt 所在的機器爲主節點,設IP爲172.16.100.1;
2. search-servers.txt 中定義的各個節點爲subserver,作爲查詢服務 器提供者,這裏定義兩個:172.16.100.2及172.16.100.3;

主節點(172.160100.1)的安裝
1. 安裝tomcat,細節略去,安裝目錄爲:/usr/local/tomcat。
2. 下載nutch-1.0.tar.gz,並解壓縮,設解壓縮到/data /nutch;
3. 將/data/nutch/nutch-1.0.war解壓到tomcat的webapps目錄下,即/usr/local/tomcat/webapps/nutch;
4. 修改 /usr/local/tomcat/webapps/nutch/WEB-INF/classes/nutch-site.xml,補充1個屬性定義:
<property>
        <name>searcher.dir</name>
        <value>/data/winter/search-dir</value>
        <description> Path to root of crawl. 即 search-servers.txt 所在的父目錄
        </description>
</property>

subserver(172.16.100.2及172.16.100.3)的配置:
1. 設subserver配置地址爲: /data/search-server
2. 將/data/nutch下的bin、conf、lib、plugin s等拷貝到/data/search-server下;
3. chmod +x bin,使得bin下的腳本可執行;
4. 在conf/nutch-site.xml中添加兩個屬性:
<property>
        <name>plugin.folders</name>
        <value>/data/search-server/plugins</value>
        <description>Directories where nutch plugins are located.
        </description>
</property>

<property>
        <name>searcher.dir</name>
        <value>/data/indexes</value>
        <description> Path to root of crawl.  
        </description>
</property>

    searcher.dir指向本地的索引文件路徑 ,可以包含多個index,但每個index下都必須包含index.done文件。

配置完畢,然後把hdfs上的索引分散拷貝到subserver中(爲簡單起見,可以先拷貝到一個subserver)。

啓動方法:
1. 在主機器上編輯search-servers.txt,指定所有的subserver的IP及端口號,如:
   172.16.100.1 9999
   172.16.100.2 9999

2. 在各個subserver上啓動DistributedSearch.Server進程:nohup bin/nutch server 9999 > server.log 2>&1 &;
3. 啓動172.16.100.1上的tomcat;
4. 測試以下地址:http://172.16.100.1:8080/nutch ,爲搜索首頁;

如果測試不成功,可以從以下兩個日誌中分析:
1. subserver上的 server.log ;
2. 主節點上的tomcat日誌;

 

nutch-1.0的分佈式查詢只能作爲研究學習用,應用在實際搜索階段有以下幾個問題:
1. 搜索的idf信息只是各個subserver相對的idf,未參考整體的idf,這個在nutch jira中有人提過,也有提交過一些patch,可以參考下;
2. DistributedSegmentBean 中getSummary(HitDetails[] detailsArr, Query query)方法會導致summary亂序,修改下源代碼可以解決;
3. HitDetails 的write 及read方法,用UTF方法傳輸field 及value,如果長度超過65536,會出現 UTFDataFormatException異常,換Text吧;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章