wiki:waue/2009/0409

Version 4 (modified by waue, 16 years ago) (diff)

--

Nutch 完整攻略

前言

  • 雖然之前已經測試過了,網路上也有許多人分享過成功的經驗,然而這篇的重點
    • 完整的安裝nutch,並解決中文亂碼問題
    • 用hadoop的角度來架設nutch
    • 搜尋引擎不只是找網頁內的資料,也能爬到網頁內的檔案(如pdf,msword)

環境

  • 目錄
/opt/nutch nutch 家目錄
/opt/nutch_conf nutch設定檔
/opt/hadoop hadoop家目錄
/opt/conf hadoop設定檔
/tmp/ 日誌檔、中間檔與暫存檔

step 1 安裝好Hadoop叢集

  • 可以參考這篇 hadoop叢集安裝
  • 當然單機版也可以,只是這樣就直接安裝nutch更省事囉!單機安裝nutch可以參考這裡nutch單機安裝,但是設定檔要參考這篇的才完整。
  • 安裝好hadoop 叢集之後,/opt/的權限就是使用者的了,並且ssh登入兩台都免密碼,hadoop也能正常執行,並且安裝於/opt/hadoop下,設定檔在 /opt/conf

step 2 下載與安裝

2.1 下載 nutch 並解壓縮

  • nutch 1.0 (2009/03/28 release )
    $ cd /opt
    $ wget http://ftp.twaren.net/Unix/Web/apache/lucene/nutch/nutch-1.0.tar.gz
    $ tar -zxvf nutch-1.0.tar.gz
    $ mv nutch-1.0.tar.gz nutch
    

2.2 部屬hadoop,nutch目錄結構

$ mv nutch/conf ./nutch_conf
$ cp -rf conf/* nutch_conf
$ cp -rf hadoop/* nutch
  • 做完以上動作,nutch的設定檔就會被放在/opt/nutch_conf下,並且把現有hadoop的設定(/opt/conf)帶進nutch的設定中,而nutch_home內的hadoop執行檔也會跟正在運行的hadoop同個版本。
  • 以上的目錄結構在於nutch與hadoop分離,主程式與設定檔分離,(日誌檔則統一被紀錄到/tmp中),這樣的目的在於,要刪除nutch的話直接移除目錄就好,不會動到原本的hadoop。

step 3 編輯設定檔

  • 所有的設定檔都在 /opt/nutch_conf 下

3.1 hadoop-env.sh

  • 將原本的檔案hadoop-env.sh任意處填入
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    export HADOOP_HOME=/opt/nutch
    export HADOOP_CONF_DIR=/opt/nutch_conf
    export HADOOP_SLAVES=$HADOOP_CONF_DIR/slaves
    export HADOOP_LOG_DIR=/tmp/hadoop/logs
    export HADOOP_PID_DIR=/tmp/hadoop/pid
    export NUTCH_HOME=/opt/nutch
    export NUTCH_CONF_DIR=/opt/nutch_conf
    
  • 載入環境設定值
    $ source /opt/nutch_conf/hadoop-env.sh
    
  • ps:強烈建議寫入 /etc/bash.bashrc 中比較萬無一失!!

3.2 hadoop-site.xml

<configuration>

  <property>

    <name>fs.default.name</name>

    <value>hdfs://node1:9000/</value>

    <description> </description>

  </property>

  <property>

    <name>mapred.job.tracker</name>

    <value>node1:9001</value>

    <description>  </description>

  </property>

  <property>

    <name>hadoop.tmp.dir</name>

    <value>/tmp/hadoop/hadoop-${user.name}</value>

    <description> </description>

  </property>

</configuration>

3.3 nutch-site.xml

  • 重要的設定檔,新增了必要的內容於內,然而想要了解更多參數資訊,請見nutch-default.xml
    <configuration>
    <property>
      <name>http.agent.name</name>
      <value>nutch</value>
      <description>HTTP 'User-Agent' request header. </description>
    </property>
    <property>
      <name>http.agent.description</name>
      <value>nutch-crawl</value>
      <description>Further description</description>
    </property>
    <property>
      <name>http.agent.url</name>
      <value>node1</value>
      <description>A URL to advertise in the User-Agent header. </description>
    </property>
    <property>
      <name>http.agent.email</name>
      <value>user@nchc.org.tw</value>
      <description>An email address
      </description>
    </property>
    <property>
    
      <name>plugin.folders</name>
    
      <value>/opt/nutch/plugins</value>
    
      <description>Directories where nutch plugins are located. </description>
    
    </property>
    
    <property>
    
      <name>plugin.includes</name>
    
      <value>protocol-(http|httpclient)|urlfilter-regex|parse-(text|html|js|ext|msexcel|mspowerpoint|msword|oo|pdf|rss|swf|zip)|index-(more|basic|anchor)|query-(more|basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
    
      <description> Regular expression naming plugin directory names</description>
    
     </property>
    
     <property>
    
      <name>parse.plugin.file</name>
    
      <value>parse-plugins.xml</value>
    
      <description>The name of the file that defines the associations between
    
      content-types and parsers.</description>
    
     </property>
    
     <property>
    
       <name>db.max.outlinks.per.page</name>
    
       <value>-1</value>
    
       <description> </description>
    
     </property>
    
     <property>
    
       <name>http.content.limit</name>
    
       <value>-1</value>
    
     </property>
    
    <property>
    
    <property>
    
      <name>indexer.mergeFactor</name>
    
      <value>500</value>
    
      <description>The factor that determines the frequency of Lucene segment
    
      merges. </description>
    
    </property>
    
    
    <property>
    
      <name>indexer.minMergeDocs</name>
    
      <value>500</value>
    
      <description>This number determines the minimum number of Lucene. </description>
    
    </property>
    
    </configuration>
    

3.4 slaves

  • 這個檔不用設定,因為依照hadoop的叢集環境,下面列出我們環境所設定的
    node1
    node2
    

3.5 crawl-urlfilter.txt

  • 重新編輯爬檔規則,此檔重要在於若設定不好,則爬出來的結果幾乎是空的,也就是說最後你的搜尋引擎都找不到資料啦!
    # skip  ftp:, & mailto: urls
    -^(ftp|mailto):
    # skip image and other suffixes we can't yet parse
    -\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$
    # skip URLs containing certain characters as probable queries, etc.
    -[*!@]
    # accecpt anything else
    +.*
    

3.6 regex-urlfilter.txt

  • 雖然官方網站鮮少介紹到此檔,但是crawl-urlfilter.txt用來設定爬intranet的規則,而regex-urlfilter.txt則是用來設定爬internet的規則
$ cd /opt/nutch_conf
$ cp regex-urlfilter.txt regex-urlfilter.txt-bek
$ cp crawl-urlfilter.txt regex-urlfilter.txt

step 4 執行nutch

  • 在此假設你已經把hadoop 啟動並且正在運作了。因此nutch是利用這個已經在運做的平台上
  • 如果你的hadoop還沒啟動,則請在master節點(此篇以node1當作master)下 bin/start-all.sh指令;如果你的環境很clean,則請在master節點下
    • 到/opt/nutch 或 /opt/hadoop皆可
      $ cd /opt/nutch
      $ bin/hadoop namenode -format
      $ bin/start-all.sh
      

4.1 編輯url清單

$ mkdir urls
$ vim urls.txt
http://www.nchc.org.tw

4.2 上傳清單到HDFS

$ bin/hadoop -put urls urls

4.3 執行nutch crawl

  • 用下面的指令就可以命令nutch開始工作了,之後map reduce會瘋狂工作
    $ bin/nutch crawl urls -dir search -threads 2 -depth 3 -topN 100000
    
    • 執行上個指令會把執行過程秀在stdout上。若想要以後慢慢看這些訊息,可以用io導向的方式傾倒於日誌檔
      $ bin/nutch crawl urls -dir search -threads 2 -depth 3 -topN 100000 >& nutch.log
      
  • 在nutch運作的同時,可以在node1節點用瀏覽器,透過 job管理頁面,hdfs管理頁面,程序運作頁面 來監看程序。

step 5 瀏覽搜尋結果

  • nutch 在 step 4 的工作是把你寫在urls.txt檔內的網址,用map reduce的程序來進行資料分析,但是分析完之後,要透過tomcat來觀看結果。以下就是安裝與設定你的客製化搜尋引擎的步驟。

5.1 安裝tomcat

  • 下載tomcat
    $ cd /opt/
    $ wget http://ftp.twaren.net/Unix/Web/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz
    
  • 解壓縮
    $ tar -xzvf apache-tomcat-6.0.18.tar.gz
    $ mv apache-tomcat-6.0.18 tomcat
    

5.1 tomcat server設定

  • 修改 /opt/tomcat/conf/server.xml 以修正中文亂碼問題
     <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" URIEncoding="UTF-8"
                   useBodyEncodingForURI="true" />
    

5.3 下載crawl結果

  • 先把放在hdfs上,nutch的運算結果下載到local端
    $ cd /opt/nutch
    $ bin/hadoop dfs -get search /opt/search
    

5.4 設定nutch的搜尋引擎頁面到tomcat

  • 把nutch的搜尋引擎頁面取代為tomcat的webapps/ROOT
    $ cd /opt/nutch
    $ mkdir web
    $ cd web
    $ jar -xvf nutch-1.0.war
    $ rm nutch-1.0.war
    $ mv /opt/tomcat/webapps/ROOT /opt/tomcat/webapps/ROOT-ori
    $ cd /opt/nutch
    $ mv /opt/nutch/web /opt/tomcat/webapps/ROOT
    

5.5 設定搜尋引擎內容的來源路徑

  • 5.4的步驟雖然設定好搜尋引擎的頁面,然而其只能當作是介面而已,因此這個步驟把要搜尋的內容與搜尋介面做個連結
    $ vim /opt/tomcat/webapps/ROOT/WEB-INF/classes/nutch-site.xml
    
<configuration>
    <property>
        <name>searcher.dir</name>
        <value>/opt/search</value>
    </property>
</configuration>

5.6 啟動tomcat

$ /opt/tomcat/bin/startup.sh

step 6 享受結果

Enjoy ! http://localhost:8080