热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

原文地址:http:blog.sina.com.cnsblog_3c9872d00101p4f0.htmlNutch2.2.1发布快两月了,该版本与Nutch之前版本相比,有较大变化,

原文地址: 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  将以下行的注释取消

default”/>

  

l  修改以下行。从默认的


 改成


  

l  将以下行的注释取消


注:上述第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,即 。反正我照此操作没有成功(应该受编码格式的影响),最后改成搞定了。

5)       修改nutch-site配置文件

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

l  添加http.agent.name的值



http.agent.name

YourNutchSpider


  

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



             http.accept.language

             ja-jp, en-us,en-gb,en;q=0.7,*;q=0.3

             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.

             

    

        

    

             storage.data.store.class

             org.apache.gora.sql.store.SqlStore

             The Gora DataStore class for storing and retrieving data.

             Currently the following stores are available:.

             

    

        



         parser.character.encoding.default

         utf-8

         The character encoding to fall back to when no other information

         is available


  

l  特别添加以下内容



    generate.batch.id

    *


如果不添加此项内容,则通过”bin/nutch crawl urls –threads n –depths n”爬取网页时,在日志中会看到以下错误:

java.lang.NullPointerException 
at org.apache.avro.util.Utf8.(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实现网站内容的抓取和索引

 

 


推荐阅读
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
author-avatar
zz998877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有