zoukankan      html  css  js  c++  java
  • 一个简单搜索引擎的搭建过程(Solr+Nutch+Hadoop)

           最近,因为未来工作的需要,我尝试安装部署了分布式爬虫系统Nutch,并配置了伪分布式的Hadoop来存储爬取的网页结果,用solr来对爬下来的网页进行搜索。我主要通过参考网上的相关资料进行安装部署的。但网上的资料很多比较乱,我也走了一些弯路。下面将我的安装过程记录下来,供大家参考。不足之处,请大家批评指正。
    环境:操作系统是Ubuntu10.04,jdk是openjdk-7-jdk。

    一、安装nutch1.6
        我曾直接下载部署nutch1.6的二进制文件,虽然可以成功爬取网页,但用solr来搜索下载好的网页时,总是无法成功。后来选择下载nutch1.6的源文件自己编译,则可以很好的和solr结合,完成搜索操作,并可以利用Hadoop平台来存储爬取的结果。以下是操作过程。
    1、因为nutch的源代码是用svn来管理的,所以首先需要安装svn。如果机器中已经安装了svn,此步骤可以跳过。
    sudo apt-get install subversion
    2、将nutch的源代码从网上checkout。
    svn co https://svn.apache.org/repos/asf/nutch/tags/release-1.6/ nutch
    3、进入nutch文件夹下的conf文件夹,修改配置文件nutch-site.xml。在文件的<configuration>中加入下面内容
        <property>
            <name>http.agent.name</name>
            <value>My nutch agent</value>
        </property>
    value值不能为空,否则会报错。
    4、在nutch文件夹下,会发现有一个build.xml文件,它是ant的工作文件,用来编译、打包。我们在此目录中,用ant编译源程序。(若机器上没有安装ant,则通过命令:sudo apt-get install ant来安装)
        直接输入命令:ant
        第一次编译会耗费几分钟时间,因为需要下载该项目依赖的jar文件。以后再重新编译时,只需要十几秒就可以完成。编译、打包完后,会生成一个runtime文件夹。
    6、进入到nutch目录下的runtime目录,会发现里面有两个文件夹:local、deploy。其中,local是用来直接爬取网页信息,存储在本地。而deploy是将爬取网页的任务提交给Hadoop,用MapReduce的方式来爬取网页信息,并将结果存储在HDFS上。下面会详细介绍如何使用它们。


    二、基于Tomcat的solr的安装
    1、安装solr
    1)首先,执行以下命令,下载solr3.6.2
        wget http://mirror.bjtu.edu.cn/apache/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
    2)将压缩文件解压后,进入到解压文件的example目录,复制nutch的conf目录中的schema.xml文件到[solr_home]/example/solr/conf目录。(注:[solr_home]为解压后的solr目录名称,其他以此类推)
    3)修改配置文件solr/conf/solrconfig.xml,将里面所有的<strname="df">text</str>都替换为<strname="df">content</str>。
    2、安装配置tomcat
    1) 去apach的官网http://tomcat.apache.org,下载Tomcat的最新版本apache-tomcat-7.0.39。
    2)将压缩文件解压后,拷贝[solr_home]/example/webapps/solr.war文件到[tomcat_home]/webapps目录下。
    3)将[solr_home]/example/ 下的solr目录拷贝到[tomcat_home]下。
    4)在tomcat目录下的conf/Catalina/localhost 目录中(如果没有则手工创建该目录)创建solr.xml文件,文件内容如下:
    <Context docBase="[tomcat_home]/webapps/solr.war" debug="0" crossContext="true" >
    <Environment name="solr/home" type="java.lang.String" value="[tomcat_home]/solr" override="true" />
    </Context>
    5)修改[tomcat_home]/conf下的server.xml文件,找到<Connector port="8080" … 项(假设tomcat监听8080端口),添加编码方式,修改后如下:
    <Connector port="8080" URIEncoding="UTF-8"…
    6)启动tomcat。然后在浏览器中输入http://localhost:8080/solr/,出现欢迎界面则表示配置成功。
    3、爬取网页并建立索引,用solr来进行搜索。
    1)进入到[nutch_home]/runtime/local/,新建文件夹,命名为urls。在urls目录中,新建一个名为url.txt的文档,在文档中输入一个或多个要爬取的网页地址并保存(如:http://www.qq.com)。
    2)在目录[nutch_home]/runtime/local/下,输入如下爬取网页的命令:
    bin/nutch crawl urls -dir data -threads 20 -depth 3 -topN 100
    该命令的意思是:爬取存放在目录urls中的文件里的网页地址对应的网页信息,启动20个线程来完成任务,仅抓取网页上的超链接形成的树形结构中(起始网页为根),深度不超过3层的网页。最终仅保存结果中的前100条,保存在当前目录下的data文件夹中。
    3)运行如下命令,将结果映射到solr中(Tomcat必须先启动)
    bin/nutch solrindex http://127.0.0.1:8080/solr/ data/crawldb -linkdb data/linkdb data/segments/*
    4)通过网页访问http://127.0.0.1:8080/solr/admin/,就可以在Query String栏中,输入要搜索的文字进行搜索了。


    三、基于伪分布式Hadoop的爬虫系统
    1、安装单机版的伪分布式Hadoop系统。
        安装过程比较简单,网上有很多资料可以参考。我安装的版本是Hadoop1.0.4。
    2、启动Hadoop的所有节点,将含有存放网页地址的文档的文件夹上传到HDFS上。
    3、启动Tomcat。
    4、进入到[nutch_home]/runtime/deploy/目录下,运行命令:
       bin/nutch crawl /user/guangpeng/urls/ -solr http://127.0.0.1:8080/solr -dir crawl -depth 3 -topN 100 -threads 5
    其中,/user/guangpeng/urls/为存放网页地址的文档在HDFS上的地址。
    5、通过网页访问http://127.0.0.1:8080/solr/admin/,就可以在Query String栏中,输入要搜索的文字进行搜索了。

    四、主要参考文档

    http://wiki.apache.org/nutch/NutchTutorial
    http://wiki.apache.org/solr/
    http://yangshangchuan.iteye.com/blog/1837935
    http://www.cnblogs.com/sirhuoshan/archive/2013/04/24/3040158.html

    致谢

    感谢小潘同学在百忙中帮我审阅稿件。

  • 相关阅读:
    ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket
    plainless script for es
    canal 代码阅读
    elasticsearch 之编译过程
    nfs 共享目录
    canal mysql slave
    yum 运行失败
    linux 几种服务类型
    2019-04-16 SpringMVC 学习笔记
    2019-04-10 集成JasperReport
  • 原文地址:https://www.cnblogs.com/jpfss/p/7908325.html
Copyright © 2011-2022 走看看