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结合并成功运行
将右边的多标签切换到Order and Export 选中conf 目录,点击右边的Top将其置到顶部,然后点击OK
我们选中项目右键新建一个文件夹叫urls,在urls文件夹里面新建一个名叫seeds.txt的File,在seeds.txt里面写入http://www.baidu.com/ 这个文件夹是作为nutch抓取的url链接种子文件夹
接下来找到ivy/ivy.xml文件,找到
<dependency org="org.apache.gora" name="gora-sql" rev="0.1.1-incubating" conf="*->default" />
<dependency org="mysql" name="mysql-connector-java" rev="5.1.18" conf="*->default" />
将他们分别取消注释,找到
<dependency org="org.apache.gora" name="gora-core" rev="0.3" conf="*->default" />
将它修改为
<dependency org="org.apache.gora" name="gora-core" rev="0.2.1" conf="*->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记得前面说到的开启远程连接
该文件可以配置的信息都是根据conf/nutch-default.xml里面的配置项来的,当在nutch-site.xml中配置了某些信息后,nutch在执行的时候会用这个文件里面的信息覆盖掉default.xml里面的信息,在conf/nutch.site.xml文件里面主要是配置nutch调优的一些参数,同时还有一些参数是必须要显示的配置的,这个文件里面的内容非常重要,我们在nutch-site.xml文件中添加如下配置
<property> <name>http.agent.name</name> <value>YourNutchSpider</value> </property> <property> <name>http.accept.language</name> <value>ja-jp, en-us,en-gb,en,zh-cn,zh-tw;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>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> <property> <name>plugin.folders</name> <value>src/plugin</value> <description>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.</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>
执行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
<property> <name>plugin.folders</name> <value>src/plugin</value> </property>
而且操作了前面流程的第一步,在命令行编译执行的要把这个值改为
<property> <name>plugin.folders</name> <value>plugins</value> </property>
这个错误经常出现就是因为经常忘记改这个值了
下面一篇文章还是在Nutch + Mysql结合的情况下,开始介绍分析一下Nutch的流程,可能会写2到3篇之后对Nutch的大体流程有了基本了解之后,开始Nutch + HBase的配置讲解