nutch2.2.1+mysql集成教程

首先,參考笨小蔥之前的博客,完成mysql的安裝和nutch2.x的安裝編譯。然後,修改一些配置就可以完成集成工作啦


MySQL配置

1.my.cnf配置
分別在[client]、[mysql]下添加“default-character-set=utf8”;
在[mysqld]下添加:character-set-server=utf8

權限授予
mysql –u root –p xxxx
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY  "xxxx";
 創建數據庫與表
手動創建數據庫nutch和數據表webpage【如果不想用默認的庫名和表名也可在nutch安裝後的相關配置文件中進行修改,見後續說明】,其中webpage的表結構如下:
CREATE TABLE `webpage` (
  `id` varchar(767) CHARACTER SET latin1 NOT NULL,
  `headers` blob,
  `text` mediumtext,
  `status` int(11) DEFAULT NULL,
  `markers` blob,
  `parseStatus` blob,
  `modifiedTime` bigint(20) DEFAULT NULL,
  `score` float DEFAULT NULL,
  `typ` varchar(32) CHARACTER SET latin1 DEFAULT NULL,
  `baseUrl` varchar(512) CHARACTER SET latin1 DEFAULT NULL,
  `content` mediumblob,
  `title` varchar(2048) DEFAULT NULL,
  `reprUrl` varchar(512) CHARACTER SET latin1 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,
  `batchId` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

這裏如果報錯字段指定的值過大,那麼把大於255的值改成255就可以。這是因爲utf8編碼的字符大小限制



NUTCH2.x配置


注意如果你集成的是nutch2.3,那麼你在測試數據爬取的時候可能會碰到這個錯誤。


這是由於avro這個架包衝突了。2.3中對gora-sql的支持需要用到avro-1.3.3.jar而gora需要avro-1.7.6.jar的支持。所以在配置完nutch對mysql的支持後,運行測試網站爬取時會出這個錯。你可以在$nutch_home/runtime/lib下面看看是否同時存在這兩個架包。(這裏笨小蔥試着去掉一個架包,但是會報其他錯誤。試了好久也沒有解決這個問題。希望大牛能夠指點一下該如何做0.0


由於工作任務要儘快完成,所以暫時先用了nutch2.2.1版本。這裏如果不清楚怎麼下載之前的版本的話,請看下面的截圖。登陸到nutch官網下載頁面:http://nutch.apache.org/downloads.html。

往下拉,找到這個超鏈接,裏面就是歷屆nutch版本啦。



 配置nutch對mysql的支持,修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分別:

將以下行的註釋取消

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

修改以下行

從默認的<dependencyorg="org.apache.gora" name="gora-core" rev="0.3"conf="*->default"/>,改成<dependencyorg="org.apache.gora" name="gora-core"rev="0.2.1"conf="*->default"/>

將以下行的註釋取消

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

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


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密碼)

修改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 theAccept-Language request header field.

             This allows selecting non-Englishlanguage as default one to retrieve.

             It is a useful setting for search enginesbuild for certain national group.

             </description>

   </property>

        

   <property>

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

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

             <description>TheGora DataStore class for storing and retrieving data.

             Currently the following stores areavailable:.

             </description>

   </property>

        

<property>

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

         <value>utf-8</value>

         <description>Thecharacter encoding to fall back to when no other information

         isavailable</description>

</property>

l  特別添加以下內容

<property>

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

<value>*</value>

</property>

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


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

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


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

網頁抓取配置

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中即可查看到爬蟲抓取的內容,如下圖:




發佈了35 篇原創文章 · 獲贊 15 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章