首先说一下nutch是一个爬虫,可以根据自己添加的规则进行网站爬取,可以是单击模式,也可以是集群模式。 先决条件:首先必须保证hadoop、hbase、ant已经安装。我用的是hadoop1.2,hbase0.94,ant1.9.1
安装
1、首先从官网下载tar包,我下载的是apache-nutch-2.2.1-src.tar.gz,(command:wget http://archive.apache.org/dist/nutch/2.2.1/apache-nutch-2.2.1-src.tar.gz )下载地址:http://archive.apache.org/dist/nutch/,可以根据自己的需要下载相应的版本。
2、对下载的tar包进行解压(tar xzvf apache-nutch-2.2.1-src.tar.gz),可以根据自己的数据源进行不同的配置,我使用的是hbase来保存数据,所以介绍一下针对hbase的一些配置;
3、在NUTCH_HOME的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>
复制代码
4、在NUTCH_HOME的ivy目录下,编辑ivy.xml,将下面这行的注释去掉。- <!-- Uncomment this to use HBase as Gora backend. -->
-
- <dependency org="org.apache.gora" name="gora-hbase" rev="0.3" conf="*->default" />
复制代码
5、在NUTCH_HOME的conf目录下编辑gora.properties,将下面这行的注释去掉。- gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
复制代码
6、在NUTCH_HOME下使用ant命令进行编译,会生成runtime目录,这个目录下包含两个文件夹deploy、local,也就是本地和分布式运行的脚本。(编译时直接使用命令ant即可)
7、编译就可以通过./crawl <seedDir> <crawlID> <numberOfRounds>命令进行抓取了(seedDir种子目录,crawlID表名,默认格式crawlID_webpage,numberOfRounds 抓取深度)
问题1、在hbase进行升级的时候发现nutch出现了版本不匹配的问题,错误如下- njectorJob: starting at 2013-10-21 16:44:03
- InjectorJob: Injecting urlDir: /usr/local/news
- Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HColumnDescriptor.setMaxVersions(I)V
- at org.apache.gora.hbase.store.HBaseMapping$HBaseMappingBuilder.addFamilyProps(HBaseMapping.java:114)
- at org.apache.gora.hbase.store.HBaseStore.readMapping(HBaseStore.java:612)
- at org.apache.gora.hbase.store.HBaseStore.initialize(HBaseStore.java:110)
- at org.apache.gora.store.DataStoreFactory.initializeDataStore(DataStoreFactory.java:102)
- at org.apache.gora.store.DataStoreFactory.createDataStore(DataStoreFactory.java:161)
- at org.apache.gora.store.DataStoreFactory.createDataStore(DataStoreFactory.java:135)
- at org.apache.nutch.storage.StorageUtils.createWebStore(StorageUtils.java:75)
- at org.apache.nutch.crawl.InjectorJob.run(InjectorJob.java:221)
- at org.apache.nutch.crawl.InjectorJob.inject(InjectorJob.java:251)
- at org.apache.nutch.crawl.InjectorJob.run(InjectorJob.java:273)
- at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
- at org.apache.nutch.crawl.InjectorJob.main(InjectorJob.java:282)
复制代码
原因是因为nutch默认支持的是hbase0.90.4,将hbase版本换成hbase0.92.2就可以了。
|