Nutch2.x 使用gora做数据抽象层,底层的数据存储可以支持Mysql,HBase,Cassandra等,而1.x是基于HDFS的。Nutch2.x官方推荐的是和HBase结合,不过这里我们先配置Nutch2.2.1和Mysql运行,因为Mysql查询起来更加直观,难度也稍微低那么一点,通过和mysql的结合成功对nutch的流程理解有很大帮助,最后记录和讨论一下nutch2.2.1 + Mysql的一些不足和我发现的一个bug
Nutch2.2.1 + Mysql 结合参考官网推荐的资料 : http://nlp.solutions.asia/?p=362,按里面所说安装,配置mysql并且建立数据库和表结构,如果你的mysql安装在其他机器上,比如windows上面或者其他linux机器上面,记得要设置mysql的远程连接,默认在linux上安装的mysql的远程连接是关闭的,方法有如下两步:
(1). vim /etc/mysql/my.conf 将[mysqld]下面的bind-address = 127.0.0.1给注释掉
(2). 进入mysql执行
grant all PRIVILEGES on *.* to root@'%' identified by '110';
操作完之后重启一下mysql:
sudo service mysql restart 或者 sudo /etc/init.d/mysql restart
接下来在STS里面配置nutch2.2.1 让它和mysql结合并成功运行
1. 选中项目右键Build Path --> Configure Build Path
将右边的多标签切换到Order and Export 选中conf 目录,点击右边的Top将其置到顶部,然后点击OK
2. 更改和Mysql存储相关的一些配置
我们选中项目右键新建一个文件夹叫urls,在urls文件夹里面新建一个名叫seeds.txt的File,在seeds.txt里面写入http://www.baidu.com/ 这个文件夹是作为nutch抓取的url链接种子文件夹
接下来找到ivy/ivy.xml文件,找到
default"/>
default"/>
将他们分别取消注释,找到
default"/>
将它修改为
default"/>
修改完之后进入到项目重新执行ant eclipse,然后刷新项目
编辑conf/gora.properties,将原来的默认配置注释掉加入Mysql的相关信息
###############################
# MySQL properties #
###############################
gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
gora.sqlstore.jdbc.url=jdbc:mysql://localhost:3306/nutch?createDatabaseIfNotExist=true&useUnicode=true&autoReconnect=true
gora.sqlstore.jdbc.user=xxxxx
gora.sqlstore.jdbc.password=xxxxx
最终如下
这是你想要连接的mysql的信息,如果是远程的mysql记得前面说到的开启远程连接
3. 配置conf/nutch-site.xml文件内相关信息
该文件可以配置的信息都是根据conf/nutch-default.xml里面的配置项来的,当在nutch-site.xml中配置了某些信息后,nutch在执行的时候会用这个文件里面的信息覆盖掉default.xml里面的信息,在conf/nutch.site.xml文件里面主要是配置nutch调优的一些参数,同时还有一些参数是必须要显示的配置的,这个文件里面的内容非常重要,我们在nutch-site.xml文件中添加如下配置
http.agent.name
YourNutchSpider
http.accept.language
ja-jp, en-us,en-gb,en,zh-cn,zh-tw;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.
parser.character.encoding.default
utf-8
The character encoding to fall back to when no other information
is available
plugin.folders
src/plugin
Directories where nutch plugins are located. Each
element may be a relative or absolute path. If absolute, it is used
as is. If relative, it is searched for on the classpath.
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: ….
4. 运行Inject类测试是否成功配置和运行
执行src/java/org/apache/nutch/crawl/InjectorJob.java这个类该类的作用是将我们前面新建的那个urls目录当做爬虫抓取的的种子url注入到数据库中(这里我们配的是mysql,那么就会被注入到mysql中),如果不出意外应该可以成功在数据库里面看到有一条数据被写入了
右键执行InjectorJob.java类 RunAs--->RunConfigurations...
这里最常见的一个错误是
x point org.apache.nutch.net.URLNormalizer not found
这个错误经常出现,原因就是nutch没有找到插件地址,如果是在编辑器里面运行的确保在conf/nutch.site.xml文件里边plugin.folders如下对应的值为src/plugin
plugin.folders
src/plugin
而且操作了前面流程的第一步,在命令行编译执行的要把这个值改为
plugin.folders
plugins
这个错误经常出现就是因为经常忘记改这个值了
下面一篇文章还是在Nutch + Mysql结合的情况下,开始介绍分析一下Nutch的流程,可能会写2到3篇之后对Nutch的大体流程有了基本了解之后,开始Nutch + HBase的配置讲解