最近,因为未来工作的需要,我尝试安装部署了分布式爬虫系统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

致谢

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

一个简单搜索引擎的搭建过程(Solr+Nutch+Hadoop)的更多相关文章

  1. Python—一个简单搜索引擎索引库

    因为课业要求,搭建一个简单的搜索引擎,找了一些相关资料并进行了部分优化(坑有点多) 一.数据 数据是网络上爬取的旅游相关的攻略页面 这个是travels表,在索引中主要用到id和url两个字段. 页面 ...

  2. 使用TensorFlow 来实现一个简单的验证码识别过程

    本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...

  3. 一个简单的hexo搭建博客网站的故事

    首先安装hexo mkdir hexo #创建一个文件夹 cd hexo #切换到hexo目录下面 npm install -g hexo-cli npm install hexo --save 然后 ...

  4. Flask 使用pycharm 创建项目,一个简单的web 搭建

    1:新建项目后 2:Flask web 项目重要的就是app 所有每个都需要app app=Flask(__name__)   3:Flask 的路径是有app.route('path')装饰决定, ...

  5. Linux内核分析(三)内核启动过程分析——构造一个简单的Linux系统

    一.系统的启动(各历史节点) 在最开始的时候,计算机的启动实际上依靠一段二进制码,可以这么理解,他并不是一个真正的计算机启动一道程序.计算机在开始加电的时候几乎是没有任何用处的,因为RAM芯片中包括的 ...

  6. 基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎 网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并 ...

  7. 发布一个简单的npm包

    本文简单地记录了发布一个简单npm包的过程,以便后续参考使用. 初始化npm init 通过npm init创建一个package.json文件 D:\robin\lib\weapp-utils> ...

  8. python 搭建一个简单的 搜索引擎

    我把代码和爬好的数据放在了git上,欢迎大家来参考 https://github.com/linyi0604/linyiSearcher 我是在 manjaro linux下做的, 使用python3 ...

  9. Access应用笔记<四>-一个完整的自动化报表搭建过程

    距离之前的三篇日志已经很久啦,今天终于完成了一个比较完整的自动化报表搭建过程 基于公司数据保密原则,样板就不放到网上来了,简单说一下背景: 这次access实现的功能包括: 1)为部门整体搭建了一个员 ...

随机推荐

  1. 关于C++构造函数一二

    关于构造函数的调用顺序: 1.继承关系 2.从属关系 3.static声明的从属关系 关于拷贝构造函数的声明: classname(const classname & rhs) #includ ...

  2. OC第三天(内存管理)

    内存管理: 1.作用范围: 不论什么继承了NSObject的对象,堆基本数据类型无效如:int a ,float price;;等 2.原理: 每一个对象内部都保存了一个与之相关的整数,称为引用计数器 ...

  3. Ubuntu下的用户和权限(三)

    七.增删群组相关的命令 相同的我们要先介绍两个重要的设定档:/etc/group和/etc/gshadow,前面那个事实上和/etc/passwd一样.而后者就是群组的password表了.先看看长啥 ...

  4. 防止 Chrome 屏蔽 非官方 扩展程序 教程(二)

    说明 前面介绍过一篇通过开发人员模式载入扩展程序的方法,尽管能够正常使用,可是每次又一次打开 Chrome 都会弹出询问窗体,比較麻烦.这里介绍第二种防止屏蔽的方法.与前一种方法相比,尽管应用的步骤多 ...

  5. 37.Qt网络与通信

    1 获取本机网络与通信 在网络应用中,经常需要获得本机的主机名.IP地址和硬件地址等网络信息.运用QHostInfo,QNetWorkInterface,QNetworkAddressEntry可获得 ...

  6. Flask-上传文件和访问上传的文件

     1.1.上传文件和访问上传的文件 upload_file_demo.py from flask import Flask,request,render_template import os from ...

  7. Core篇——初探Core配置管理

    文章目录 1.命令行配置 2.Json文件配置 3.配置文件文本至C#对象实例的映射 4.配置文件热更新 5.总结 命令行的配置 我们首先来创建一个.net core 的控制台项目,然后引入.net ...

  8. Hua Wei 机试题目二

    题目描述:假设1元,5元,10元,50元,100元的人民币若干,实现一个能找到最少张数累计达到一个指定金额方法.如:67元,可分为67个1元钱.也可分为6个10元7个1元,其中最少人民币分法为一张50 ...

  9. 使用pgpool管理数据库集群故障的问题

    pgpool如何选举master角色 在pgpool启动的过程中通过对 pgpoo.conf配置文件中的数据库节点条目信息,对集群中的数据库节点从0开始一个个的遍历,并发送SQL语句“select p ...

  10. cache(缓存)的作用

    cache的作用: 连接文件.内存与应用,为信息流在三者之间流动提供通道: 存储管理:对外与对内: 存取效率: 多线程: 一次存储:分批存储? 系统的缓存控制机制(虚拟内存)使用分段分页与命中机制. ...