zoukankan      html  css  js  c++  java
  • 大数据之nutch

    一、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/[sS]*
      

    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>

  • 相关阅读:
    Java Android程序员软件开发知识:枚举的介绍,以及代码的编写教程。
    Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
    Android(java)开发之将double类型,强制保留到小数点后两位解决方法。
    Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
    Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
    输入流、输出流
    关键字和继承
    java集合
    SpringMVC框架拦截器
    SpringMVC框架基础
  • 原文地址:https://www.cnblogs.com/chaoren399/p/4789855.html
Copyright © 2011-2022 走看看