Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试

          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

    Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试_第1张图片

  

   2. 更改和Mysql存储相关的一些配置

   我们选中项目右键新建一个文件夹叫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" />

 Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试_第2张图片

    修改完之后进入到项目重新执行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

   最终如下

    Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试_第3张图片

  这是你想要连接的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文件中添加如下配置

<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>


   4. 运行Inject类测试是否成功配置和运行

        执行src/java/org/apache/nutch/crawl/InjectorJob.java这个类该类的作用是将我们前面新建的那个urls目录当做爬虫抓取的的种子url注入到数据库中(这里我们配的是mysql,那么就会被注入到mysql中),如果不出意外应该可以成功在数据库里面看到有一条数据被写入了

       右键执行InjectorJob.java类 RunAs--->RunConfigurations...

        Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试_第4张图片

   这里最常见的一个错误是 

    x point org.apache.nutch.net.URLNormalizer not found

    Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试_第5张图片

  这个错误经常出现,原因就是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的配置讲解

 


你可能感兴趣的:(Nutch)