http://blog.csdn.net/eryk86/article/details/14111811
 
使用https://github.com/apache/nutch.git导入nutch项目到intellij
 
配置ivy.xml和conf下的gora.properties、nutch-site.xml
修改ivy/ivy.xml
     修改elasticsearch版本
  1. <dependency org="org.elasticsearch" name="elasticsearch" rev="0.90.5" conf="*->default"/>
     去掉如下内容注解
  1. <dependency org="org.apache.gora" name="gora-hbase" rev="0.3" conf="*->default" />
     修改软件版本,从1.2.15改成1.2.16,解决部分包导入失败问题
  1. <dependency org="log4j" name="log4j" rev="1.2.16" conf="*->master" />
修改gora.properties
     注掉如下几行
  1. #gora.sqlstore.jdbc.driver=org.hsqldb.jdbc.JDBCDriver
  2. #gora.sqlstore.jdbc.url=jdbc:hsqldb:hsql://localhost/nutchtest
  3. #gora.sqlstore.jdbc.user=sa
  4. #gora.sqlstore.jdbc.password=
     添加一行
  1. gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
 
修改nutch-site.xml,增加如下配置项
  1. <property>
  2. <name>storage.data.store.class</name>
  3. <value>org.apache.gora.hbase.store.HBaseStore</value>
  4. </property>
  5. <property>
  6. <name>http.agent.name</name>
  7. <value>NutchCrawler</value>
  8. </property>
  9. <property>
  10. <name>parser.character.encoding.default</name>
  11. <value>utf-8</value>
  12. </property>
  13. <property>
  14. <name>http.accept.language</name>
  15. <value>ja-jp, en-us, zh-cn,en-gb,en;q=0.7,*;q=0.3</value>
  16. </property>
  17. <property>
  18. <name>generate.batch.id</name>
  19. <value>1</value>
  20. </property>
 
增加hbase配置文件hbase-site.xml到nutch/conf中  
  1. <configuration>
  2. <property>
  3. <name>hbase.rootdir</name>
  4. <value>file:///data/hbase</value>
  5. </property>
  6. <property>
  7. <name>hbase.zookeeper.property.dataDir</name>
  8. <value>/data/zookeeper</value>
  9. </property>
  10. </configuration>
 
修改nutch/src/bin/nutch,文件开头增加
      NUTCH_JAVA_HOME=/usr/local/jdk
 
修改src下org.apache.nutch.indexer.elastic.ElasticWriter 109行,使支持es0.90.5
      item.isFailed()
 
删除nutch/conf下所有template文件
 
编译nutch

ant clean

      ant runtime
 
修改nutch-site.xml
  1. <property>
  2. <name>plugin.folders</name>
  3. <value>/home/eryk/workspace/nutch/runtime/local/plugins</value>
  4. </property>
设置intelil,增加nutch/conf和nutch/runtime/lib到classpath
File->Project Structure->Dependencies 增加nutch/conf和nutch/runtime/local/lib目录
 
增加pom.xml的依赖库
  1. <dependency>
  2. <groupId>net.sourceforge.nekohtml</groupId>
  3. <artifactId>nekohtml</artifactId>
  4. <version>1.9.15</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.ccil.cowan.tagsoup</groupId>
  8. <artifactId>tagsoup</artifactId>
  9. <version>1.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>rome</groupId>
  13. <artifactId>rome</artifactId>
  14. <version>1.0</version>
  15. </dependency>
 
修改pom.xml中es版本
  1. <dependency>
  2. <groupId>org.elasticsearch</groupId>
  3. <artifactId>elasticsearch</artifactId>
  4. <version>0.90.5</version>
  5. <optional>true</optional>
  6. </dependency>
 
修正依赖库的版本冲突
  1. <dependency>
  2. <groupId>org.restlet.jse</groupId>
  3. <artifactId>org.restlet.ext.jackson</artifactId>
  4. <version>2.0.5</version>
  5. <exclusions>
  6. <exclusion>
  7. <artifactId>jackson-core-asl</artifactId>
  8. <groupId>org.codehaus.jackson</groupId>
  9. </exclusion>
  10. <exclusion>
  11. <artifactId>jackson-mapper-asl</artifactId>
  12. <groupId>org.codehaus.jackson</groupId>
  13. </exclusion>
  14. </exclusions>
  15. <optional>true</optional>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.gora</groupId>
  19. <artifactId>gora-core</artifactId>
  20. <version>0.3</version>
  21. <exclusions>
  22. <exclusion>
  23. <artifactId>jackson-mapper-asl</artifactId>
  24. <groupId>org.codehaus.jackson</groupId>
  25. </exclusion>
  26. </exclusions>
  27. <optional>true</optional>
  28. </dependency>
修改src下org.apache.nutch.crawl.Crawler代码,增加-elasticindex和-batchId参数
 
  1. Map<String,Object> argMap = ToolUtil.toArgMap(
  2. Nutch.ARG_THREADS, threads,
  3. Nutch.ARG_DEPTH, depth,
  4. Nutch.ARG_TOPN, topN,
  5. Nutch.ARG_SOLR, solrUrl,
  6. ElasticConstants.CLUSTER,elasticSearchAddr,      //使用es建立索引
  7. Nutch.ARG_SEEDDIR, seedDir,
  8. Nutch.ARG_NUMTASKS, numTasks,
  9. Nutch.ARG_BATCH,batchId,      //解决NullPointerException问题
  10. GeneratorJob.BATCH_ID,batchId);       //解决NullPointerException问题,貌似没用
  11. run(argMap);
 
修改org.apache.nutch.indexer.elastic.ElasticWriter代码,支持-elasticindex ip:port传参
  1. public void open(TaskAttemptContext job) throws IOException {
  2. String clusterName = job.getConfiguration().get(ElasticConstants.CLUSTER);
  3. if (clusterName != null && !clusterName.contains(":")) {
  4. node = nodeBuilder().clusterName(clusterName).client(true).node();
  5. } else {
  6. node = nodeBuilder().client(true).node();
  7. }
  8. LOG.info(String.format("clusterName=[%s]",clusterName));
  9. if(clusterName.contains(":")){
  10. String[] addr = clusterName.split(":");
  11. client = new TransportClient()
  12. .addTransportAddress(new InetSocketTransportAddress(addr[0],Integer.parseInt(addr[1])));
  13. }else{
  14. client = node.client();
  15. }
  16. bulk = client.prepareBulk();
  17. defaultIndex = job.getConfiguration().get(ElasticConstants.INDEX, "index");
  18. maxBulkDocs = job.getConfiguration().getInt(
  19. ElasticConstants.MAX_BULK_DOCS, DEFAULT_MAX_BULK_DOCS);
  20. maxBulkLength = job.getConfiguration().getInt(
  21. ElasticConstants.MAX_BULK_LENGTH, DEFAULT_MAX_BULK_LENGTH);
  22. }
 
在nutch目录下增加urls目录,在url目录下新建seed.txt,写入要爬的种子地址
 
运行Crawler
     传入参数
     urls -elasticindex a2:9300 -threads 10 -depth 3 -topN 5 -batchId 1
     观察nutch/hadoop.log日志
  1. 2013-11-03 22:57:36,682 INFO  elasticsearch.node - [Ikonn] started
  2. 2013-11-03 22:57:36,682 INFO  elastic.ElasticWriter - clusterName=[a2:9300]
  3. 2013-11-03 22:57:36,692 INFO  elasticsearch.plugins - [Electron] loaded [], sites []
  4. 2013-11-03 22:57:36,863 INFO  basic.BasicIndexingFilter - Maximum title length for indexing set to: 100
  5. 2013-11-03 22:57:36,864 INFO  indexer.IndexingFilters - Adding org.apache.nutch.indexer.basic.BasicIndexingFilter
  6. 2013-11-03 22:57:36,864 INFO  anchor.AnchorIndexingFilter - Anchor deduplication is: off
  7. 2013-11-03 22:57:36,865 INFO  indexer.IndexingFilters - Adding org.apache.nutch.indexer.anchor.AnchorIndexingFilter
  8. 2013-11-03 22:57:37,946 INFO  elastic.ElasticWriter - Processing remaining requests [docs = 86, length = 130314, total docs = 86]
  9. 2013-11-03 22:57:37,988 INFO  elastic.ElasticWriter - Processing to finalize last execute
  10. 2013-11-03 22:57:41,986 INFO  elastic.ElasticWriter - Previous took in ms 1590, including wait 3998
  11. 2013-11-03 22:57:42,020 INFO  elasticsearch.node - [Ikonn] stopping ...
  12. 2013-11-03 22:57:42,032 INFO  elasticsearch.node - [Ikonn] stopped
  13. 2013-11-03 22:57:42,032 INFO  elasticsearch.node - [Ikonn] closing ...
  14. 2013-11-03 22:57:42,039 INFO  elasticsearch.node - [Ikonn] closed
  15. 2013-11-03 22:57:42,041 WARN  mapred.FileOutputCommitter - Output path is null in cleanup
  16. 2013-11-03 22:57:42,057 INFO  elastic.ElasticIndexerJob - Done
查询es
     返回结果,说明已经跑通了,观察hbase中,表已经自动建好,并存入了已经爬到的数据
     
 
参考

Nutch2.x 集成ElasticSearch 抓取+索引的更多相关文章

  1. nutch2.2.1+mysql抓取数据

    基本环境:linux centos6.5 nutch2.2.1 源码包, mysql 5.5 ,elasticsearch1.1.1, jdk1.7 1.下载地址http://mirror.bjtu. ...

  2. 15-分析Ajax请求并抓取今日头条街拍美图

    流程框架: 抓取索引页内容:利用requests请求目标站点,得到索引网页HTML代码,返回结果. 抓取详情页内容:解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 下载图片与保存数据库:将 ...

  3. 分析Ajax请求并抓取今日头条街拍美图

    项目说明 本项目以今日头条为例,通过分析Ajax请求来抓取网页数据. 有些网页请求得到的HTML代码里面并没有我们在浏览器中看到的内容.这是因为这些信息是通过Ajax加载并且通过JavaScript渲 ...

  4. Python爬虫系列-分析Ajax请求并抓取今日头条街拍图片

    1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果. 2.抓取详情页内容 解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 3.下载图片与保存数据库 将 ...

  5. 【Python爬虫案例学习】分析Ajax请求并抓取今日头条街拍图片

    1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果. from urllib.parse import urlencode from requests.excep ...

  6. Nutch2.x 演示抓取第一个网站

    http://www.micmiu.com/opensource/nutch/nutch2x-crawl-first-website/?utm_source=tuicool&utm_mediu ...

  7. Nutch2.1+mysql+solr3.6.1+中文网站抓取

    1.mysql 数据库配置 linux mysql安装步骤省略. 在首先进入/etc/my.cnf (mysql为5.1的话就不用修改my.cnf,会导致mysql不能启动)在[mysqld] 下添加 ...

  8. windows环境下nutch2.x 在eclipse中实现抓取数据存进mysql详细步骤

    nutch2.x 在eclipse中实现抓取数据存进mysql步骤 最近在研究nutch,花了几天时间,也遇到很多问题,最终结果还是成功了,在此记录,并给其他有兴趣的人提供参考,共同进步. 对nutc ...

  9. Nutch 2.2+MySQL+Solr4.2实现网站内容的抓取和索引

    原文地址: http://blog.sina.com.cn/s/blog_3c9872d00101p4f0.html Nutch 2.2.1发布快两月了,该版本与Nutch之前版本相比,有较大变化,特 ...

随机推荐

  1. Linux下network提示Determining if ip address

    转自:https://blog.csdn.net/ranran0224/article/details/73323925 Centos系统重启网络服务network 会提示Determining if ...

  2. **python中的类和他的成员

    面向对象是一种编程方式,此编程方式的实现基于对 类 和 对象 的使用. Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 在这里,为文章中使用 ...

  3. Asp .net core api+Entity Framework core 实现数据CRUD数据库中(附Git地址)

    最近在学dotNetCore 所以尝试了一下api 这个功能 不多说了大致实现如下 1.用vs2017建立一个Asp.net  Core Web 应用程序 在弹出的对话框中选择 Web API 项目名 ...

  4. IOS数据持久化存储之SQLite3第三方库FMDB的使用

    SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是Android还是IOS,都内置了SQLite数据库,现在的版本都是SQLite3.在IOS中使用SQLite如果使 ...

  5. VS2008调用VS2012的WCF服务的方式和遇到的问题

    1 用添加服务引用的懒方式 2 用http请求方式 3 客户端自己定义一个Contract,跟服务端的一样(可以只写要使用的方法,不用全部写完). 由于规范要求,前两种都不能用,后面根据同事的描述,产 ...

  6. js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)

    1.工厂模式 function a(name){ var b = new object(); b.name = name; b.say = function(){ alert(this.name); ...

  7. 文件操作类File

    File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 FileInfo类:提供创建.复制.删除.移动和打开文件的属性和实例方法.FileInfo类 Directory类:公开用于 ...

  8. 校准liunx时间简单好用的命令

    查看时间服务器的时间# rdate time-b.nist.gov 设置时间和时间服务器同步# rdate -s time-b.nist.gov 查看硬件时间 # hwclock 将系统时间写入硬件时 ...

  9. LoadRunner11学习记录二 -- 进行cookie模拟

    1.LoadRunner录制打开一个网页的脚本,会生成脚本夹杂迅雷,迅雷看看,百度等链接地址,这是因为ie打开之后会加载未禁用的加载项.需要把相关的加载项禁用掉. 禁用ie加载项步骤,工具--管理加载 ...

  10. networkX用法整

    无向图,有向图,加权图等例子代码 [http://www.cnblogs.com/kaituorensheng/p/5423131.html#_label1] 数据分析学习笔记(三)-NetworkX ...