文档章节

Nutch2.2.1介绍及使用

张升强
 张升强
发布于 2014/12/26 15:19
字数 1093
阅读 164
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1. Nutch介绍

Nutch是一个开源的网络爬虫项目,更具体些是一个爬虫软件,可以直接用于抓取网页内容。

现在Nutch分为两个版本,1.x和2.x。1.x最新版本为1.7,2.x最新版本为2.2.1。两个版本的主要区别在于底层的存储不同。

1.x版本是基于Hadoop架构的,底层存储使用的是HDFS,而2.x通过使用Apache Gora,使得Nutch可以访问HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStore等NoSQL。

2. 编译Nutch

Nutch1.x从1.7版本开始不再提供完整的部署文件,只提供源代码文件及相关的build.xml文件,这就要求用户自己编译Nutch,而整个Nutch2.x版本都不提供编译完成的文件,所以想要学习Nutch2.2.1的功能,就必须自己手动编译文件。

2.1 下载解压

$ wget http://archive.apache.org/dist/nutch/2.2.1/apache-nutch-2.2.1-src.tar.gz $ tar zxf apache-nutch-2.2.1-src.tar.gz

2.2 编译

$ cd apache-nutch-2.2.1 $ ant

有可能你会得到如下错误:

Trying to override old definition of task javac
  [taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.

ivy-probe-antlib:

ivy-download:
  [taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.

解决办法:

  1. 下载sonar-ant-task-2.1.jar,将其拷贝到apache-nutch-2.2.1目录下面
  2. 修改build.xml,引入上面添加的jar包:
<!-- Define the Sonar task if this hasn't been done in a common script --> <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> <classpath path="${ant.library.dir}" /> <classpath path="${mysql.library.dir}" /> <classpath><fileset dir="." includes="sonar*.jar" /></classpath> </taskdef>

Nutch使用ivy进行构建,故编译需要很长时间,如果编译时间过长,建议修改maven仓库地址,修改方法:

通过用http://mirrors.ibiblio.org/maven2/替换ivy/下ivysettings.xml中的http://repo1.maven.org/maven2/来解决。代码位置为:

<property name="repo.maven.org" value="http://repo1.maven.org/maven2/" override="false"/>

编译之后的目录如下:

➜  apache-nutch-2.2.1  tree -L 1
.
├── CHANGES.txt
├── LICENSE.txt
├── NOTICE.txt
├── README.txt
├── build
├── build.xml
├── conf
├── default.properties
├── docs
├── ivy
├── lib
├── runtime
├── sonar-ant-task-2.1.jar
└── src

7 directories, 7 files

可以看到编译之后多了两个目录:build和runtime

3. 修改配置文件

由于Nutch2.x版本存储采用Gora访问Cassandra、HBase、Accumulo、Avro等,需要在该文件中制定Gora属性,比如指定默认的存储方式gora.datastore.default= org.apache.gora.hbase.store.HBaseStore,该属性的值可以在nutch-default.xml中查找storage.data.store.class属性取得,在不做gora.properties文件修改的情况下,存储类为org.apache.gora.memory.store.MemStore,该类将数据存储在内存中,仅用于测试目的。

这里,将其存储方式改为HBase,请参考 http://wiki.apache.org/nutch/Nutch2Tutorial

修改 conf/nutch-site.xml

<property> <name>storage.data.store.class</name> <value>org.apache.gora.hbase.store.HBaseStore</value> <description>Default class for storing data</description> </property>

修改 ivy/ivy.xml

<!-- Uncomment this to use HBase as Gora backend. --> <dependency org="org.apache.gora" name="gora-hbase" rev="0.3" conf="*->default" />

修改 conf/gora.properties,确保HBaseStore被设置为默认的存储,

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore

因为这里用到了HBase,故还需要一个HBase环境,你可以使用Standalone模式搭建一个HBase环境,请参考 HBase Quick Start。需要说明的时,目前HBase的版本要求为 hbase-0.90.4。

4. 集成Solr

由于建索引的时候需要使用Solr,因此我们需要安装并启动一个Solr服务器。

4.1 下载,解压

$ wget http://mirrors.cnnic.cn/apache/lucene/solr/4.8.0/solr-4.8.0.tgz $ tar -zxf solr-4.8.0.tgz

4.2 运行Solr

$ cd solr-4.8.0/example $ java -jar start.jar

验证是否启动成功

用浏览器打开 http://localhost:8983/solr/admin/,如果能看到页面,说明启动成功。

4.3 修改Solr配置文件

将apache-nutch-2.2.1/conf/schema-solr4.xml拷贝到solr-4.8.0/solr/collection1/conf/schema.xml,并在<fields>...</fields>最后添加一行:

<field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/>

重启Solr,

# Ctrl+C to stop Solr $ java -jar start.jar

5. 抓取数据

编译后的脚本在 runtime/local/bin 目录下,可以运行命令查看使用方法:

crawl命令:

$ cd runtime/local/bin $ ./crawl 
Missing seedDir : crawl <seedDir> <crawlID> <solrURL> <numberOfRounds>

nutch命令:

$ ./nutch 
Usage: nutch COMMAND
where COMMAND is one of:
 inject     inject new urls into the database
 hostinject     creates or updates an existing host table from a text file
 generate   generate new batches to fetch from crawl db
 fetch      fetch URLs marked during generate
 parse      parse URLs marked during fetch
 updatedb   update web table after parsing
 updatehostdb   update host table after parsing
 readdb read/dump records from page database
 readhostdb     display entries from the hostDB
 elasticindex   run the elasticsearch indexer
 solrindex  run the solr indexer on parsed batches
 solrdedup  remove duplicates from solr
 parsechecker   check the parser for a given url
 indexchecker   check the indexing filters for a given url
 plugin     load a plugin and run one of its classes main() nutchserver    run a (local) Nutch server on a user defined port
 junit          runs the given JUnit test  or
 CLASSNAME  run the class named CLASSNAME
Most commands print help when invoked w/o parameters.

接下来可以抓取网页了。

张升强
粉丝 39
博文 119
码字总数 154023
作品 0
广州
高级程序员
私信 提问
加载中
请先登录后再评论。
Nutch2.2.1 笔记三 : 从Nutch脚本执行来看Nutch的内部执行过程

网上大部分的Nutch资料都是以前相对老的版本的一些介绍,其中介绍启动Nutch大多数是用如下命令 : bin/nutch crawl urls -topN 10 -depth 1000 bin/nutch文件是一个shell脚本,我们在STS里面...

DLow
2014/07/28
568
0
Nutch2.2.1 笔记二 : Nutch2.2.1 + Mysql 配置,调试

Nutch2.x 使用gora做数据抽象层,底层的数据存储可以支持Mysql,HBase,Cassandra等,而1.x是基于HDFS的。Nutch2.x官方推荐的是和HBase结合,不过这里我们先配置Nutch2.2.1和Mysql运行,因为M...

DLow
2014/07/25
1.4K
4
Nutch-2.2.1安装时无法从资源库下载jar包的问题

在Nutch2.2.1目录下执行ant命令后,在从http://repo1.maven.org/maven2/下载所需的jar包时出现下图出现的问题, 导致依赖的jar无法正常下载,编译失败。此问题的原因是http://repo1.maven.or...

CdTech
2014/12/02
0
0
nutch2.2.1抓取时对已经抓取过的数据重复抓取

@S2JH 你好,最近在nutch2.2.1开发使用时,发现了一个问题,请教一下您: 问题描述:出现重复抓取现象,即第二次抓取时会将第一次抓取的数据再抓取一遍,第三次抓取时会将第一次、第二次抓取...

陈lay
2016/07/25
536
2
Nutch-2.2.1安装时无法从资源库下载jar包的问题

在Nutch2.2.1目录下执行ant命令后,在从http://repo1.maven.org/maven2/下载所需的jar包时出现下图出现的问题, 导致依赖的jar无法正常下载,编译失败。此问题的原因是http://repo1.maven.or...

CdTech
2014/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS二分查找

二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素...

osc_ftbxuxl1
17分钟前
9
0
王爽汇编语言(第三版)环境搭建(附PDF及工具下载)

一、前言 最近在学习汇编语言,使用的是读者评价非常高的王爽老师写的《汇编语言》(第三版),为了适应现在各个版本的windows操作系统,所以采用VMWare虚拟机来搭建纯DOS环境。 二、需要的工...

osc_xsd7kks3
19分钟前
4
0
关于面向对象和面向过程本质的区别(个人感悟)

前言:   接触面向对象的概念也差不多两年了,对于面向对象也有着自己的一些感悟,期间也看到过面向过程的一些文章,但总是对于两种思想没有明确的区别概念,刚好今天在某篇博客上看到对于...

osc_zf8orajc
21分钟前
7
0
6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

每周趣图 产品经理设计体验/用户实际体验 本周就不写技术分析文章了,分享几个珍藏已久的 IDEA 的「骚技巧」,助你快速完成代码。 还等什么?赶紧上车吧...... 先赞后看,养成习惯。微信搜索...

楼下小黑哥
22分钟前
0
0
关于面向对象和面向过程本质的区别(个人感悟)

前言:   接触面向对象的概念也差不多两年了,对于面向对象也有着自己的一些感悟,期间也看到过面向过程的一些文章,但总是对于两种思想没有明确的区别概念,刚好今天在某篇博客上看到对于...

osc_tjnx25e9
22分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部