Nutch 2.2+MySQL+Solr4.2實現網站內容的抓取和索引


原文地址: http://blog.sina.com.cn/s/blog_3c9872d00101p4f0.html

Nutch 2.2.1發布快兩月了,該版本與Nutch之前版本相比,有較大變化,特別是與MySQL聯合應用的安裝和配置過程有不少地方容易出錯。本人在安裝過程中也遇到了不少麻煩,大多問題通過baidu和google也沒有找到解決方法,自己只能通過看代碼和分析日志並試錯,最終搞定了所遇到的各種問題,現將重要安裝和配置過程整理如下。

1.  MySQL數據庫配置

l  my.ini配置

分別在[client]、[mysql]下添加

default-character-set=utf8

在[mysqld]下添加:

character-set-server=utf8

  

l  權限授予

mysql –u root –p xxxx

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY  "xxxx";

  

l  創建數據庫與表

手動創建數據庫nutch和數據表webpage【如果不想用默認的庫名和表名也可在nutch安裝后的相關配置文件中進行修改,見后續說明】,其中webpage的表結構如下:

CREATE TABLE `webpage` (

`id` varchar(767) NOT NULL,

`headers` blob,

`text` longtext DEFAULT NULL,

`status` int(11) DEFAULT NULL,

`markers` blob,

`parseStatus` blob,

`modifiedTime` bigint(20) DEFAULT NULL,

`prevModifiedTime` bigint(20) DEFAULT NULL,

`score` float DEFAULT NULL,

`typ` varchar(32) CHARACTER SET latin1 DEFAULT NULL,

`batchId` varchar(32) CHARACTER SET latin1 DEFAULT NULL,

`baseUrl` varchar(767) DEFAULT NULL,

`content` longblob,

`title` varchar(2048) DEFAULT NULL,

`reprUrl` varchar(767) DEFAULT NULL,

`fetchInterval` int(11) DEFAULT NULL,

`prevFetchTime` bigint(20) DEFAULT NULL,

`inlinks` mediumblob,

`prevSignature` blob,

`outlinks` mediumblob,

`fetchTime` bigint(20) DEFAULT NULL,

`retriesSinceFetch` int(11) DEFAULT NULL,

`protocolStatus` blob,

`signature` blob,

`metadata` blob,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  

注:表中的字段根據nutch的conf文件“gora-sql-mapping”進行設置。同時也可通過自動方式生成數據庫和表:配置好“gora-sql-mapping”、“gora.properties”及其它文件后,首次通過運行”bin/nutch inject urls”即可自動生成數據庫和表,不過或許在自動生成的時候你會遇到問題,不過沒有關系,通過及時查看hadoop.log文件你便會發現很多問題(如下圖之一)與MySQL支持的數據類型、數據長度有關,只需要根據日志提示做修改、調試(可借助navicat工具像SQL Server方便操作數據庫),然后再重復自動生成過程,直到成功為止。

Nutch <wbr>2.2+MySQL+Solr4.2實現網站內容的抓取和索引

2.  Nutch的安裝與配置

1)       獲取nutch 2.2.x從官網http://www.apache.org/dyn/closer.cgi/nutch/下載,然后解壓至本地安裝目錄,如本地根目錄為 ${NUTCH_HOME};

2)       配置nutchmysql的支持,修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分別:

l  將以下行的注釋取消

<dependency org=”mysql” name=”mysql-connector-java” rev=”5.1.18″ conf=”*->default”/>

  

l  修改以下行。從默認的

<dependency org="org.apache.gora" name="gora-core" rev="0.3" conf="*->default"/>

 改成

<dependency org="org.apache.gora" name="gora-core" rev="0.2.1" conf="*->default"/>

  

l  將以下行的注釋取消

<dependency org="org.apache.gora" name="gora-sql" rev="0.1.1-incubating" conf="*->default" />

注:上述第2和第3項,如果按默認的不做修改,將會在抓取網頁時遇到以下錯誤。


Nutch <wbr>2.2+MySQL+Solr4.2實現網站內容的抓取和索引

Exception in thread “main” Java.lang.ClassNotFoundException:org.apache.gora.sql.store.SqlStore

3)       數據庫連接配置

編輯${NUTCH_HOME}/conf/gora.properties文件,注釋掉默認的數據庫連接配置,同時添加以下配置內容:

###############################

# Default MySQL properties    #

###############################

gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver

gora.sqlstore.jdbc.url=jdbc:mysql://localhost:3306/nutch?createDatabaseIfNotExist=true

gora.sqlstore.jdbc.user=xxxx(MySQL用戶名)

gora.sqlstore.jdbc.password=xxxx(MySQL密碼)

  

4)       數據表映射配置

主要是修改 ${NUTCH_HOME}/conf/gora.properties 文件,這里的修改建議按照前面介紹的自動生成數據表的方法進行修改,網上說的要將primarykey 的長度從512修改成767,即 <primarykey column=”id” length=”767″/>。反正我照此操作沒有成功(應該受編碼格式的影響),最后改成<primarykey column=”id” length=”255″/>搞定了。

5)       修改nutch-site配置文件

我的做法是直接將nutch-default文件另存為nutch-site,然后修改nutch-site內容,包括:

l  添加http.agent.name的值

<property>

<name>http.agent.name</name>

<value>YourNutchSpider</value>

</property>

  

l  在文件末尾添加以下內容

<property>

             <name>http.accept.language</name>

             <value>ja-jp, en-us,en-gb,en;q=0.7,*;q=0.3</value>

             <description>Value of the Accept-Language request header field.

             This allows selecting non-English language as default one to retrieve.

             It is a useful setting for search engines build for certain national group.

             </description>

    </property>

        

    <property>

             <name>storage.data.store.class</name>

             <value>org.apache.gora.sql.store.SqlStore</value>

             <description>The Gora DataStore class for storing and retrieving data.

             Currently the following stores are available:.

             </description>

    </property>

        

<property>

         <name>parser.character.encoding.default</name>

         <value>utf-8</value>

         <description>The character encoding to fall back to when no other information

         is available</description>

</property>

  

l  特別添加以下內容

<property>

    <name>generate.batch.id</name>

    <value>*</value>

</property>

如果不添加此項內容,則通過”bin/nutch crawl urls –threads n –depths n”爬取網頁時,在日志中會看到以下錯誤:

java.lang.NullPointerException 
at org.apache.avro.util.Utf8.<init>(Utf8.java:37) 
at org.apache.nutch.crawl.GeneratorReducer.setup(GeneratorReducer.java:100) 
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:174) 
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:649) 
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418) 
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:398) 

並且“nutch-site”文件需要保存為utf-8格式,否則在執行nutch命令時會出現以下錯誤。


Nutch <wbr>2.2+MySQL+Solr4.2實現網站內容的抓取和索引

 

Exception in thread “main” java.lang.RuntimeException: com.sun.org.apache.xerces.internal.impl.io.malformedByteSequenceException: 1字節的UTF-8序列的字節 1 無效。

6)       編譯nutch 2.2

在保證已安裝ant的情況下(沒有安裝的可在網上baidu下ant的安裝方法),回到nutch根目錄,使用ant編譯 ${NUTCH_HOME}。如果都按上述配置一步步做了,則編譯過程將順利完成。至此,Nutch 2.2的安裝也已完成,接下來就可以根據需要配置網頁抓取信息,進行網頁抓取了。

3.  網頁抓取配置

1)       設置抓取的網站

cd ${NUTCH_HOME}/runtime/local 
mkdir -p urls 
echo 'http://www.tianya.cn' > urls/seed.txt

  

2)       執行爬取操作

bin/nutch crawl urls -depth 3 -topN 5

  

執行完在mysql中即可查看到爬蟲抓取的內容,如下圖:

Nutch <wbr>2.2+MySQL+Solr4.2實現網站內容的抓取和索引

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM