一、nutch简介

nutch是大名鼎鼎的Doug Cutting发起的爬虫项目,nutch孵化了现在大数据处理框架Hadoop。在nutch V 0.8.0 版本之前,Hadoop是nutch的一部分,从nutch V0.8.0开始,HDFS和MapReduce从nutch中剥离出成为Hadoop。v0.8.0之后,nutch就完全构建在Hadoop的基础之上了。

Nutch是一个开源的网络爬虫,在搜索引擎中负责爬取网页,同时自动维护网页的URL信息,例如相同网页去重、网页定时更新、网页重定向。nutch采用了MapReduce分布式爬取和解析,具有良好的水平扩展性。
现在版本的Nutch本身并不具有搜索功能(V1.2之后,nutch专注于爬取数据),但是可以自动向搜索服务器提交爬取的网页。例如,solr,可以通过Nutch自带的命令,来控制Nutch是否将网页提交给索引服务器。
Nutch虽然是优秀的分布式爬虫框架,但是它的所有设计,都是为了搜索引擎服务的。在hadoop上用map-reduce框架开发,并不是很适合做数据抽取的业务。如果你的业务是做数据抽取(精抽取),而不是搜索引擎。不一定要选用Nutch。
nutch现在分为两个分支。一个是1.x系列,一个是2.x系列。它们的主要区别是2.x引入了Gora作为存储抽象层,从而支持各种NoSQL数据库,如HBase,Cassandra等

二、nutch安装

1.nutch的运行环境
    JDK1.7及以上
    需要使用linux操作系统

2.解压:

设置环境变量

验证: nutch

3.目录结构

bin:两个文件,一个是nutch,一个是crawl,
        crawl是对nutch中的命令进行了封装,实现了一站式调用。
       
conf:里面保存了nutch的基本配置信息,nutch-default.xml nutch-site.xml parse-plugins.xml regex-urlfilter.txt
   
  docs:api文档
  lib:存储了nutch的依赖jar包
  plugins:存储了nutch使用的插件jar包

三、nutch 爬虫

nutch 爬取准备工作

1:在nutch-site.xml中添加http.agent.name的配置。如果不配置,启动会报错。

2:创建一个种子地址目录,urls(在nutch 目录中就可以),在目录下面创建一些种子文件,种子文件中保存种子地址。每一个种子地址占一行。http:www.zhaozhiyong.cn

注意:种子地址必须以类似于http的字符开头

3:(可选):控制爬取的url范围,只爬取站内,在regex-urlfilter.txt 最后添加 :+^http://([a-z0-9]*\.)*bbs.superwu.cn/[\s\S]*

4:nutch爬取数据   bin/crwal urls crawl 1
    crawl urls crawl 1
    urls:表示是种子目录
    crawl:表示是爬取文件的存储位置
    1:表示是爬取的层次

5.nucth爬取生成的目录
    在爬取的时候指定的crawl中会有下面几个目录
    crawldb:存储的是待爬取的url
        查看目录数据:nutch readdb crawl/crawldb -stats -sort
    linkdb:存储的是反链信息
        查看目录数据:nutch readlinkdb crawl/linkdb -dump links
    segments:存储的是网站所有数据信息
        查看目录数据:nutch readseg -dump crawl/segments/20150906090648 sgedb
       
    一个segment包括以下子目录:
        crawl_generate:包含需要抓取的网址列表
        crawl_fetch:包含每个抓取页面的状态
        content:包含每个抓取页面的原始内容
        parse_text:包含每个抓取页面的解析文本
        parse_data:包含每个页面的外部链接(外链)和元数据
        crawl_parse:包含网址的外部链接地址,用于更新crawldb数据库

6.查看nutch生成的数据
    nutch中的数据都是sequencefile格式的,除了使用上面的nutch命令查看之外
        还可以使用java代码读取这些文件
        参考资料<查看nutch生成的中间文件>
        注意:在使用提供的代码读取文件时,需要先使用more命令查看对应文件中存储的数据类型
            对应需要修改代码中27行中的value的类型。

四、在solr中对爬取的数据建立索引

在使用solr的之前做以下步骤:

1):需要把nutch下的schema-solr4.xml拷贝到solr中

命令:cp /usr/local/nutch/conf/schema-solr4.xml /usr/local/solr-4.10.4/example/solr/collection1/conf

2):删除solr中的默认配置文件schema.xml,在把刚才拷贝过去的文件该名称
        cd /usr/local/solr-4.10.4/example/solr/collection1/conf
        rm schema.xml
        mv schema-solr4.xml schema.xml

3):在schema.xml中添加一个字段配置
        <field name="location" type="string" stored="true" indexed="true"/>

或者也可以动态指定,
        例子:crawl -i -D "solr.server.url=http://192.168.1.170:8983/solr" urls crawl 1

1.启动solr

cd /usr/local/solr-4.10.4/example
    java -jar start.jar

2.

命令:crawl -i urls crawl 1

-i:表示会对爬取的数据建立索引,默认会在本机solr中建立索引,
        如果使用其他服务器上的solr,需要修改nutch-default中solr.server.url的值,
        建议在nutch-site.xml中进行覆盖。

3.检验

http://127.0.0.1:8983/solr/  可以通过query 查看到content的内容

注意:如果把爬取层次改为2层,发先抓取的数据还是很少,那是因为在regex-urlfilter.txt中对url进行了过滤
        把url中包含?=之类的都忽略掉了。
        所以可以把这个配置直接注释掉,或者修改为其他规则。
        详细修改,参考:<regex-urlfilter解释.txt>

五、nutch源码导入到eclipse

先安装ant
    cd /usr/local
    tar -zxvf apache-ant-1.9.6-bin.tar.gz
    mv apache-ant-1.9.6 ant
    export ANT_HOME=/usr/local/nutch
    export PATH=$ANT_HOME/bin:$PATH

nutch的源码是ant管理的,所以不能直接导入到eclipse,需要转换可以使用ant eclipse -verbose但是,nutch的依赖是使用ivy管理的,
在执行转换的过程中会下载依赖的jar包,jar包很多,所以建议使用提供的.ivy.zip文件。
这样在转换的时候就需要指定一下ivy jar包的存放位置,使用下面命令
ant eclipse -Divy.default.ivy.user.dir=/usr/local/.ivy -verbose
       
转换完成之后就可以导入到eclipse中了,但是导入之后发现源码报错,

需要修改java buildpath->order and export ->把apache-nutch-1.10/src/bin 移动到最上面,   使用top按钮。

六、nutch源码编译

需要先把.ivy.zip包解压到/usr/local目录下面

解压unzip .ivy.zip(在Linux 下)
    如果提示没有unzip命令,则使用yum install -y unzip

下载nutch源码,解压,重命名

cd /usr/local
    tar -zxvf apache-nutch-1.10-src.tar.gz
    mv apache-nutch-1.10 nutch_src
    cd nutch_src
    ant -Divy.default.ivy.user.dir=/usr/local/.ivy –verbose

注意:在编译源码之前,需要修改nutch_src/conf/nutch-site.xml,
        在里面添加http.agent.name属性
        <property>
          <name>http.agent.name</name>
          <value>my nutch spider</value>
        </property>

七:nutch运行的两种方式

在nutch官网下载的nutch的bin压缩包,只支持在使用本地模式运行nutch
    想要使用集群模式的话需要使用编译后的源码中的脚本

cd /usr/local/nutch_src/runtime/deploy
    bin/crawl /urls /crawl 1

注意:在使用这种方式的时候要保证nutch所在的节点上面配置的有HADOOP_HOME
        环境变量,因为nutch在向集群中提交任务的时候会根据这个环境变量对应
        的目录下面的配置文件找集群的地址。
        /urls 表示是hdfs上面的文件,里面必须要有一个种子文件

1:nutch的采集流程
    inject:表示注入url
    generagete:生成爬取列表
    fetch:爬取url
    parse:解析url
    updatedb:更新crawldb数据库
   
    一般情况下,inject只会执行一次,generate、fetch、parse、updatedb这四步是一个循环。
   
    详细的过程参考:<nutch Crawler流程.txt>

大数据之nutch的更多相关文章

  1. Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户

        你正在使用过时的浏览器,Amaze UI 暂不支持. 请 升级浏览器 以获得更好的体验! 深度好文丨读完此文,就知道Hadoop了! 来源:BiThink 时间:2016-04-12 15:1 ...

  2. 大数据技术hadoop入门理论系列之二—HDFS架构简介

    HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...

  3. 大数据和Hadoop生态圈

    大数据和Hadoop生态圈 一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop ...

  4. 大数据测试之初识Hadoop

    大数据测试之初识Hadoop POPTEST老李认为测试开发工程师是面向测试的开发,也就是说,写代码就是为完成测试任务服务的,写自动化测试(性能自动化,功能自动化,安全自动化,接口自动化等等)的cas ...

  5. 谦先生的程序员日志之我的hadoop大数据生涯一

    从一个初级程序员到高级程序员的经历 你好!我是谦先生,我是茫茫程序猿中的一猿,平凡又执着. 刚入行的时候说实话,啥都不懂,就懂点皮毛的java,各种被虐狗的感觉.又写js又写css又写后台...慢慢被 ...

  6. Hadoop系列002-从Hadoop框架讨论大数据生态

    本人微信公众号,欢迎扫码关注! 从Hadoop框架讨论大数据生态 1.Hadoop是什么 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构 2)主要解决,海量数据的存储和海量数据的 ...

  7. Hadoop生态圈-大数据生态体系快速入门篇

    Hadoop生态圈-大数据生态体系快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.大数据概念 1>.什么是大数据 大数据(big data):是指无法在一定时间 ...

  8. 学习大数据基础框架hadoop需要什么基础

    什么是大数据?进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB(1 ...

  9. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

随机推荐

  1. eclipse使用国内镜像站点安装插件

    把eclipse 4.x的界面改为经典样式 打开eclipse,菜单栏>windows>preference>general>appearance>theme>cl ...

  2. HDU 1846 Brave Game(巴什博弈)

    题目链接: 传送门 Brave Game Time Limit: 1000MS     Memory Limit: 65536K 题目描述 各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的: ...

  3. POJ3292 Semi-prime H-numbers

    传送门: 刷<数论一本通>时看到的题,简单记录一下. 题目大意(照抄书上的):形如4n+1的数被称为H数,乘法在H数组成的集合内是封闭的.在这个集合中是能被1和本身整除的数叫H-素数,其余 ...

  4. DNS(一)之禁用权威域名服务器递归解析

    DNS dns是互联网中最核心的带层级的分布式系统,负责把域名解析成ip,把IP解析出域名,以及宣告邮件路由信息等等,使得使用域名访问网站,收发邮件成了可能. bind(berkeley Intern ...

  5. web前端环境搭建

    第一部分:浏览器 浏览器推荐chrome浏览器.FireFox浏览器. 1. chrome浏览器因为集成了Google Developer Tools(谷歌开发者工具),因此大受欢迎. 下载地址:ht ...

  6. ::before/:before和::after/:after的使用

    ::before/:before和::after/:after的使用 之前总是可以看到::before :before ::after :after,但是没有使用过,今天查了些资料,终于知道了他们的关 ...

  7. Extjs GridPanel用法详解

    Extjs GridPanel 提供了非常强大数据表格功能,在GridPanel可以展示数据列表,可以对数据列表进行选择.编辑等.在之前的Extjs MVC开发模式详解中,我们已经使用到了GridPa ...

  8. Linux查看CPU和内存使用情况

    在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...

  9. JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray

    JSONModel 嵌套字典数组  JSONModel nest NSDictionary NSArray

  10. Django笔记-字符编码相关问题整理

    1.添加中文注释后编译出错,提示:Non-ASCII   解决方法: 在Python脚本文件的第一行或第二行添加一句:      #coding:gbk或#coding:utf-8或##-*- cod ...