nutch学习、、孤剑之家 宝剑锋从磨砺出,梅花香自苦寒来。我欲仗剑走天涯。 博客园 首页 新随笔 联系 订阅订阅 管理 随笔 - 771 文章 - 8 评论 - 13

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

Nutch 2.2.1发布快两月了,该版本与Nutch之前版本相比,有较大变化,特别是与MySQL联合应用的安装和配置过程有不少地方容易出错。本人在安装过程中也遇到了不少麻烦,大多问题通过baidu和google也没有找到解决方法,自己只能通过看代码和分析日志并试错,最终搞定了所遇到的各种问题,现将重要安装和配置过程整理如下。

1.  MySQL数据库配置

l  my.ini配置

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

1
default -character-set=utf8

在[mysqld]下添加:

1
character-set-server=utf8

 l  权限授予

1
2
3
mysql –u root –p xxxx
 
GRANT  ALL  PRIVILEGES  ON  *.*  TO  root@ "%"  IDENTIFIED  BY   "xxxx" ;

  

l  创建数据库与表

手动创建数据库nutch和数据表webpage【如果不想用默认的库名和表名也可在nutch安装后的相关配置文件中进行修改,见后续说明】,其中webpage的表结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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)       配置nutch对mysql的支持,修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分别:

l  将以下行的注释取消

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

  

l  修改以下行。从默认的

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

 改成

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

  

l  将以下行的注释取消

1
<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文件,注释掉默认的数据库连接配置,同时添加以下配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
###############################
 
# Default MySQL properties    #
 
###############################
 
gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
 
 
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的值

1
2
3
4
5
6
7
<property>
 
<name>http.agent.name</name>
 
<value>YourNutchSpider</value>
 
</property>

  

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<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  特别添加以下内容

1
2
3
4
5
6
7
<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)       设置抓取的网站

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

  

2)       执行爬取操作

1
bin/nutch crawl urls -depth 3 -topN 5

  

执行完在mysql中即可查看到爬虫抓取的内容,如下图:

Nutch <wbr>2.2+MySQL+Solr4.2实现网站内容的抓取和索引

 


ght ©2015 孤剑 Powered by:  博客园  模板提供: 沪江博客

猜你喜欢

转载自blog.csdn.net/cs123456789dn/article/details/47087223