六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1116|回复: 0

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

[复制链接]
 楼主| 发表于 2014-9-3 16:24:07 | 显示全部楼层 |阅读模式
Nutch2.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 *.* TOroot@"%" IDENTIFIED BY  "xxxx";
l 创建数据库与表
手动创建数据库nutch和数据表webpage【如果不想用默认的库名和表名也可在nutch安装后的相关配置文件中进行修改,见后续说明】,其中webpage的表结构如下:
CREATETABLE `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,
PRIMARYKEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:表中的字段根据nutch的conf文件“gora-sql-mapping”进行设置。同时也可通过自动方式生成数据库和表:配置好“gora-sql-mapping”、“gora.properties”及其它文件后,首次通过运行”bin/nutchinject urls”即可自动生成数据库和表,不过或许在自动生成的时候你会遇到问题,不过没有关系,通过及时查看hadoop.log文件你便会发现很多问题(如下图之一)与MySQL支持的数据类型、数据长度有关,只需要根据日志提示做修改、调试(可借助navicat工具像SQLServer方便操作数据库),然后再重复自动生成过程,直到成功为止。


2. Nutch的安装与配置
1)      获取nutch2.2.x从官网http://www.apache.org/dyn/closer.cgi/nutch/下载,然后解压至本地安装目录,如本地根目录为${NUTCH_HOME};
2)      配置nutchmysql的支持,修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分别:
l 将以下行的注释取消
<dependencyorg=”mysql” name=”mysql-connector-java” rev=”5.1.18″conf=”*->default”/>
l 修改以下行
从默认的<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"/>
l 将以下行的注释取消
<dependencyorg="org.apache.gora" name="gora-sql" rev="0.1.1-incubating"conf="*->default" />
注:上述第2和第3项,如果按默认的不做修改,将会在抓取网页时遇到以下错误。



Exceptionin thread “main”Java.lang.ClassNotFoundExceptionrg.apache.gora.sql.store.SqlStore
3)      数据库连接配置
编辑${NUTCH_HOME}/conf/gora.properties文件,注释掉默认的数据库连接配置,同时添加以下配置内容:
###############################
#Default MySQLproperties   #
###############################
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,即<primarykeycolumn=”id” length=”767″/>。反正我照此操作没有成功(应该受编码格式的影响),最后改成<primarykeycolumn=”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 theAccept-Language request header field.
           This allows selecting non-English language as default one toretrieve.
          It is a useful setting for search engines build for certainnational group.
           </description>
   </property>
        
   <property>
           <name>storage.data.store.class</name>
           <value>org.apache.gora.sql.store.SqlStore</value>
           <description>The Gora DataStore classfor 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 encodingto fall back to when no other information
        is available</description>
</property>
l 特别添加以下内容
<property>
   <name>generate.batch.id</name>
   <value>*</value>
</property>
如果不添加此项内容,则通过”bin/nutchcrawl urls –threads n –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 无效。
6)      编译nutch2.2
在保证已安装ant的情况下(没有安装的可在网上baidu下ant的安装方法),回到nutch根目录,使用ant编译 ${NUTCH_HOME}。如果都按上述配置一步步做了,则编译过程将顺利完成。至此,Nutch2.2的安装也已完成,接下来就可以根据需要配置网页抓取信息,进行网页抓取了。
3. 网页抓取配置
1)      设置抓取的网站
cd${NUTCH_HOME}/runtime/local
      mkdir -purls
      echo 'http://www.tianya.cn' >urls/seed.txt
2)      执行爬取操作
bin/nutchcrawl urls -depth 3 -topN 5
执行完在mysql中即可查看到爬虫抓取的内容,如下图:


<未完待续>

摘自:http://blog.sina.com.cn/s/blog_3c9872d00101p4f0.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博账号登陆

x
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表