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

最近在研究nutch,花了几天时间,也遇到很多问题,最终结果还是成功了,在此记录,并给其他有兴趣的人提供参考,共同进步。

对nutch的实现过程熟悉下,就可以实现电影采集网站了   如     无为电影在线

1、环境搭建

1)准备eclipse   安装Maven ,svn

2)在svn中下载官方2.x最新源码(参考官方http://wiki.apache.org/nutch/RunNutchInEclipse说明)

3)把工程转成maven工程,等系统下载依赖包

4)这时候可能有红叉,因为缺少jar包,这是pom的问题

<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>2.0.5</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet.ext.jackson</artifactId>
<version>2.0.5</version>
<optional>true</optional>
</dependency>

比如上面这段二个包就下载不下来。maven仓库没有。需要把restlet的私库加进来:

<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.org</url>
</repository>
</repositories>

在pom.xml中增加这段,就可以下载了。

这时候按道理,应该就可以了,可是还有些问题,nutch2.x自身配的dadoop-core是1.1.1的版本,在windows环境下运行起来会有问题,如:会抛出权限异常:cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-2070047262

在网上搜索这个异常,别人提供的办法是,使用hadoop-core-1.0.2-modified.jar (下载地址) 这个包可以不配到maven,加到Lib就可以,看各人爱好。

再按道理讲,这时候该没问题了吧,实践证明 ,还是不行,(先把配置讲完)pom中配的gora-core是最新版0.3,配置mysql的时候会有问题。要改成0.2.1.

另外增加gora-sql包

<dependency>
<groupId>org.apache.gora</groupId>
<artifactId>gora-core</artifactId>
<version>0.2.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.gora</groupId>
<artifactId>gora-sql</artifactId>
<version>0.1.1-incubating</version>
<exclusions>
<exclusion>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
</exclusion>
</exclusions>
</dependency>

另外还有这几个包要在pom中配置:

<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.ccil.cowan.tagsoup</groupId>
<artifactId>tagsoup</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>dk.brics.automaton</groupId>
<artifactId>automaton</artifactId>
<version>1.11-8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>

前3个包是插件代码中有引用到,没配置插件前不报错,但是后面还是要配的。最后一个是mysql的连接器,当然要配啦。
完整的pom文件

至此环境差不多,是不是特别麻烦,现在写出来都有这么多要改,在最开始不知道的时候,得花多少时间去应付报错,找问题。

5)安装mysql,创建数据库nutch:

CREATE DATABASE nutch DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;

还有建表:

CREATE TABLE `webpage` (
`id` varchar(255) NOT NULL,
`headers` blob,
`text` mediumtext DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`markers` blob,
`parseStatus` blob,
`modifiedTime` bigint(20) DEFAULT NULL,
`score` float DEFAULT NULL,
`typ` varchar(32) CHARACTER SET latin1 DEFAULT NULL,
`baseUrl` varchar(767) DEFAULT NULL,
`content` longblob,
`title` varchar(2048) DEFAULT NULL,
`reprUrl` varchar(767) DEFAULT NULL,
`fetchInterval` int(11) DEFAULT NULL,
`prevFetchTime` bigint(20) DEFAULT NULL,
`inlinks` mediumblob,
`prevSignature` blob,
`outlinks` mediumblob,
`fetchTime` bigint(20) DEFAULT NULL,
`retriesSinceFetch` int(11) DEFAULT NULL,
`protocolStatus` blob,
`signature` blob,
`metadata` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8

2、配置

把conf目录加到Source中,并在order and export中,放在top位置(见官方说明

配置插件:把src/plugin中,如下图加到Source中(src/plugin/插件名称/src/java)

这些是我们运行org.apache.nutch.crawl.Crawler类时所用到的插件。

下一步,配置文件的配置。

首先是nutch-site.xml的配置(nutch-default.xml这个文件不需要配置,网上有的说要修改这个,其实没有必要,这是默认配置,如果需要修改,我们可以在nutch-site.xml中这个属性,会覆盖nutch-default.xml中的属性)

把nutch-default中<!-- HTTP properties -->下面的一段http的属性复制过来,并给value赋值,默认是没有值的。

然后再增加插件和数据源的配置

<!-- plugin properties -->

<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>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>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: org.apache.gora.sql.store.SqlStore
Default store. A DataStore implementation for RDBMS with a SQL interface.
SqlStore uses JDBC drivers to communicate with the DB. As explained in
ivy.xml, currently >= gora-core 0.3 is not backwards compatable with
SqlStore. org.apache.gora.cassandra.store.CassandraStore
Gora class for storing data in Apache Cassandra. org.apache.gora.hbase.store.HBaseStore
Gora class for storing data in Apache HBase. org.apache.gora.accumulo.store.AccumuloStore
Gora class for storing data in Apache Accumulo. org.apache.gora.avro.store.AvroStore
Gora class for storing data in Apache Avro. org.apache.gora.avro.store.DataFileAvroStore
Gora class for storing data in Apache Avro. DataFileAvroStore is
a file based store which uses Avro's DataFile{Writer,Reader}'s as a backend.
This datastore supports mapreduce. org.apache.gora.memory.store.MemStore
Gora class for storing data in a Memory based implementation for tests.
</description>
</property>

因为是mysql,所以store要使用

org.apache.gora.sql.store.SqlStore

其他的如网址过滤的配置,就不讲了,就是正则表达式,修改regex-urlfilter.txt就可以了。

还有个gora.properties文件要配置

gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
gora.sqlstore.jdbc.url=jdbc:mysql://localhost:3306/nutch?createDatabaseIfNotExist=true
gora.sqlstore.jdbc.user=sa
gora.sqlstore.jdbc.password=888888

3、运行

在工程下新建个文件夹叫urls  里面建个文本文件如seed.txt  内容是一个网址如:http://www.qq.com

在run configuration 中配置java application  main class org.apache.nutch.crawl.Crawler

args配置:urls -depth 3 -topN 5

vm参数配:-Xms64m -Xmx512m    这项如果不配,会报内存溢出。

这时候就可以debug或者run了。按道理是可以出来了

4、其他修改

按道理讲,源码应该不用修改。事实证明,源码也有问题,运行的时候会出错。

GeneratorJob类在运行的时候会出现空指针异常,需要在163行run 方法内,增加:

   // generate batchId
int randomSeed = Math.abs(new Random().nextInt());
String batchId = (System.currentTimeMillis() / 1000) + "-" + randomSeed;
getConf().set(BATCH_ID, batchId);

5、最后

nutch2.x官方版本问题太多了,相当麻烦。写的过程中可能有遗漏,有问题及时交流。

windows环境下nutch2.x 在eclipse中实现抓取数据存进mysql详细步骤的更多相关文章

  1. 在eclipse中创建maven项目,亲测有效,详细步骤

    一.想要使用maven,首先要配置本地maven的环境 1.在http://maven.apache.org/download.cgi中去下载maven 2. 3.下载完毕后将压缩包解压到自己记住的位 ...

  2. Vue项目中jsonp抓取数据实现方式

    因为最近在做vue的项目,在前端做数据的时候遇到了数据抓取的难题,查了一些资料,自己也研究了一下,总体来说是搞出来了(基于黄奕老师的项目找出来的经验),废话不多说,直接上代码 ------------ ...

  3. Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI

    准备工作:Eclipse ADT IDE 开发工具,NDK .Java 环境,博主的配置是:Windows x86 , ADT Build: v22.3.0-887826 , JAVA 1.7, ND ...

  4. windows环境下命令打到服务中

    1.正常redis在本地命令行中启动,现在直接在服务中启动(tomcat同理) cmd下命令如下: sc create redis binPath= D:\redis\redis-server.exe ...

  5. Python 抓取数据存储到Mysql中

    # -*- coding: utf-8 -*- import os,sys import requests import bs4 import pymysql#import MySQLdb #连接MY ...

  6. 代理server的理解(1):Windows环境下的代理server设置

    浏览器中的代理server设置 Windows系统接口提供的代理server设置是一个全局的代理server的设置,如图所看到的,这里就不多解释: 各个浏览器在使用代理设置的时候,能够主动地获代替理设 ...

  7. windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法

    按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ...

  8. Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)

    第一篇  windows环境下搭建创建的第一个安卓应用程序 为了方便,我这里只采用了一体包进行演示. 一.下载安卓环境的一体包. 官网下载:安卓官网(一般被墙了) 网盘下载: http://yunpa ...

  9. Windows环境下C++中关于文件结束符的问题

    参考资料:http://www.cnblogs.com/day-dayup/p/3572374.html 一.前言 在不同的OS环境下,程序中对应的文件结束符有所不一样,根据<C++ Prime ...

随机推荐

  1. Jetty监控线程使用情况的配置

    Jetty监控线程使用情况配置 第一步,配置xml文件 jetty-monitor.xml 参数说明: threads: 线程池中的线程 busyThreads: 使用中的线程 idleThreads ...

  2. SQL-MICK基础

    /*Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据:2.where子句基于指定的条件对记录行进行筛选:3.group by子句将数据划分为多个分组:4.使用聚集函数进行计算: ...

  3. lesson8:AtomicInteger源码解析及性能分析

    AtomicInteger等对象出现的目的主要是为了解决在多线程环境下变量计数的问题,例如常用的i++,i--操作,它们不是线程安全的,AtomicInteger引入后,就不必在进行i++和i--操作 ...

  4. android View各属性详解

    一.有8个直接子类:AnalogClock, ImageView, KeyboardView, ProgressBar, SurfaceView, TextView, ViewGroup, ViewS ...

  5. USB通讯协议之深入理解

    0. 基本概念 一个[传输](控制.批量.中断.等时):由多个[事务]组成: 一个[事务](IN.OUT.SETUP):由一多个[Packet]组成. USB数据在[主机软件]与[USB设备特定的端点 ...

  6. 【转】asp.net 利用Global.asax 捕获整个解决方案中的异常错误

    之前做项目的时候都是在每个页面中处理这不同的异常信息,一个页面数下来,很多个try{}catch{}语句块,令整个代码结构有些不够美观. 今天看到一篇帖子,是关于利用全局应用程序类来帮忙获取异常信息, ...

  7. CSS 特殊样式设置集合

    1. 父窗口宽度不定,要求内部两个子块, 第一个子块宽度固定,第二个子块宽度自适应. 第一个子块宽度固定,定位为绝对定位 position:absolute;  第二个子块设置margin-left即 ...

  8. js 判断微信浏览器(转)

    最近做很多HTML5的项目,很多页面会通过微信微博等SNS分享出去.在分享页面上提供公司APP的下载.但是在很多应用的浏览器中,点击下载链接无法下载应用.那么针对这些浏览器我们需要给用户提示从safa ...

  9. DHTML【2】--HTML

    通过题目,大家已经明确知道,从这一节开始介绍DHTML中的最基础的部分HTML,对于HTML等概念上一节已经做了概述,这一节不再赘余.在学习HTML之前,先告诉大家一个好消息,HTML不难,比C++. ...

  10. HTML5 Canvas基础知识

    HTML5画布 1.创建一个画布         <canvas id="myCanvas" width="200" height="100&q ...