Linux下在Eclipse中运行Nutch 2.2.1并存储数据到Cassandra


一、环境准备

  • 安装Maven,SVN客户端
  • 运行Cassandra 2.x
  • Eclipse LUNA
  • 下载源码svn co https://svn.apache.org/repos/asf/nutch/branches/branch-2.2.1/
    使用Eclipse导入Maven工程(有不少错误,下面解决)

二、基本配置

Nutch2.x的配置文件主要在conf文件夹下面,暂时我们先关注nutch-*.xml。复制一份nutch-site.xml.template为nutch-site.xml,自定义的配置可以放到这里面。

由于我们将要使用Cassandra存储Nutch抓取的网页数据,所以需要配置数据存储方式。Nutch2.x使用了Gora作为ORM,支持多种nosql数据库。从nutch-default.xml复制storage.data.store.class节点到到nutch-site.xml,并修改其value为org.apache.gora.cassandra.store.CassandraStore。

取消ivy/ivy.xml的注释(后面发现这个没有必要取消)

在conf/gora.properties中取消cassandra的注释,并注释默认的org.hsqldb.jdbc.JDBCDriver配置

在pom.xml添加

复制nutch-default.xml中的http.agent.name,http.robots.agents到nutch-site.xml并在value设置有效值,如pimin_net。复制plugin.folders到nutch-site.xml,其值设置为src/plugin

三、Eclipse的Build Path配置

  • 把JRE换成1.7以上版本
  • 添加conf目录到Java Build Path,并排序为TOP
  • 添加src\plugin下的插件,如src/plugin/lib-regex-filter/src/java(一定要这样的结构,否则eclipse会报错)。请不要添加官方文档介绍不要添加Feed、Parse-swf、Parse-zip和Parse-ext。屁民瑞威选择性的添加了一些插件。某些插件需要第三方lib,如果不需要,可以暂时不添加到build path。

四、修改原始错误

1、pom.xml

restlet无法在maven中找到,在pom.xml新增

提示 Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/,则修改log4j的版本为1.2.17即可

2、源码修改

注释掉src/test下org.apache.nutch.storage.TestGoraStorage.java的161行。

这样clean一下eclipse,应该没有错误提示了。

五、尝试运行

启动Cassandra

在工程文件夹新增urls文件夹,并添加seeds.txt里面加入需要爬行的网站地址,如http://pimin.net,例子采用本地http://127.0.0.1。
run configurations->Main class为org.apache.nutch.crawl.Crawler,Arguments的Program arguments填写/home/pimin/workspace/nutch2.2.1/branch-2.2.1/urls -depth 3 -topN 5

运行,报错

在pom.xml添加

运行,报错

GeneratorReducer.java的 第100行代码为batchId = new Utf8(conf.get(GeneratorJob.BATCH_ID));
为了不修改代码,可以在nutch-site.xml中配置generate.batch.id,value不为空即可(参考http://blog.csdn.net/weijonathan/article/details/9197697)

 在写这里的时候,由于不小心一个rm -rf */删除了pimin目录下的大部分资料,所以,重新整理中。。。

重新下载Cassandra和nutch,导入到eclipse中运行出现错误

跟踪发现少了regex-urlfilter.txt,复制regex-urlfilter.txt.template为regex-urlfilter.txt。

运行,又出现Caused by: org.apache.nutch.plugin.PluginRuntimeException: java.lang.ClassNotFoundException: org.apache.nutch.scoring.opic.OPICScoringFilter
原来少了scoring-opic插件,添加后运行,在eclipse的控制台没有发现错误,但是在hadoop.log下发现错误
org.apache.nutch.plugin.PluginRuntimeException: java.lang.ClassNotFoundException: org.apache.nutch.parse.tika.TikaParser
添加tika,parse-html插件。其中parse-html插件需要在pom.xml添加

运行一下,在控制台和hadoop.log中没有错误提示,上一张图吧。

在eclipse中运行nutch 2.2.1

在eclipse中运行nutch 2.2.1

六、数据检测

通过cqlsh登陆到Cassandra,可以看到新增了一个webpage的keyspace,里面有f\p\sc三个表。里面有一些二进制数据,后面再进行学习。

七、小结

主要注意pom.xml、nutch-site.xml、gora.properties以及regex-urlfilter.txt。

 

2014-10-27更新

当连接外部Cassandra时,通过gora.properties指定的gora.cassandrastore.servers=IP:9160并没有作用,需指定gora-cassandra-mapping.xml的host。

参考:

Nutch2Cassandra

Nutch2Plugins

nutch2.x 在eclipse中实现抓取数据存进mysql步骤

Nutch2.0配置安装异常集锦

 

版权声明:本文《Linux下在Eclipse中运行Nutch 2.2.1并存储数据到Cassandra》为【屁民部落】原创/翻译文章,转载时请注明出处!
本文地址:http://pimin.net/archives/380

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">