一个简单搜索引擎的搭建过程(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
致谢
感谢小潘同学在百忙中帮我审阅稿件。
一个简单搜索引擎的搭建过程(Solr+Nutch+Hadoop)的更多相关文章
- Python—一个简单搜索引擎索引库
因为课业要求,搭建一个简单的搜索引擎,找了一些相关资料并进行了部分优化(坑有点多) 一.数据 数据是网络上爬取的旅游相关的攻略页面 这个是travels表,在索引中主要用到id和url两个字段. 页面 ...
- 使用TensorFlow 来实现一个简单的验证码识别过程
本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...
- 一个简单的hexo搭建博客网站的故事
首先安装hexo mkdir hexo #创建一个文件夹 cd hexo #切换到hexo目录下面 npm install -g hexo-cli npm install hexo --save 然后 ...
- Flask 使用pycharm 创建项目,一个简单的web 搭建
1:新建项目后 2:Flask web 项目重要的就是app 所有每个都需要app app=Flask(__name__) 3:Flask 的路径是有app.route('path')装饰决定, ...
- Linux内核分析(三)内核启动过程分析——构造一个简单的Linux系统
一.系统的启动(各历史节点) 在最开始的时候,计算机的启动实际上依靠一段二进制码,可以这么理解,他并不是一个真正的计算机启动一道程序.计算机在开始加电的时候几乎是没有任何用处的,因为RAM芯片中包括的 ...
- 基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎 网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并 ...
- 发布一个简单的npm包
本文简单地记录了发布一个简单npm包的过程,以便后续参考使用. 初始化npm init 通过npm init创建一个package.json文件 D:\robin\lib\weapp-utils> ...
- python 搭建一个简单的 搜索引擎
我把代码和爬好的数据放在了git上,欢迎大家来参考 https://github.com/linyi0604/linyiSearcher 我是在 manjaro linux下做的, 使用python3 ...
- Access应用笔记<四>-一个完整的自动化报表搭建过程
距离之前的三篇日志已经很久啦,今天终于完成了一个比较完整的自动化报表搭建过程 基于公司数据保密原则,样板就不放到网上来了,简单说一下背景: 这次access实现的功能包括: 1)为部门整体搭建了一个员 ...
随机推荐
- bash脚本编程知识储备
bash脚本编程: 脚本程序:解释器解释执行: 首先得理清一些琐碎的知识点,我尽量把我所学的帮朋友一起梳理一下 编程环境:(我会在接下来的篇章,图文例子三结合的方式带大家一起学习) ...
- [Angular] Upgrade existing Angular app to Progressive Web App
If you alread have an existing Angular application and want to upgrade to progressive web app. 1. In ...
- [Node.js] Manage Configuration Values with Environment Variables
Storing configuration in files instead of the environment has many downsides, including mistakenly c ...
- 安卓项目开发实战(1)--首页顶部菜单BAR实现
从今天開始,我将開始自己手写一个星座运势的项目,星座运势的数据来源採用MYAPI的星座数据,client全然自己实现. 这个系列主要是讲project中主要界面的布局展示和一些项目中的难点解析.因为本 ...
- 【C语言】编写函数实现字符串旋转
//编写函数实现字符串旋转 #include <stdio.h> #include <assert.h> #include <string.h> void reve ...
- ADT、C和Java
<编程导论(Java)·5 链表.数组和栈> 数据抽象使得用户程序猿在编写客户程序时,摆脱该数据类型的实现细节而只关心该数据类型的接口.在计算机科学中.有一些重要的数据抽象--数据结构,应 ...
- Android 中View的绘制机制源代码分析 二
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/46842891 本篇文章接着上篇文章的内容来继续讨论View的绘制机制,上篇文章中我们主要解说 ...
- C#创建PDF文档
说明:本实例用到了第三方组件ICSharpCode.SharpZipLib.dll.itextsharp.dll,该组件可到网上下载. 代码: using System; using System.C ...
- 2016.03.10,英语,《Vocabulary Builder》Unit 05
mal: means bad. malpractice [ˌmæl'præktɪs] n. 失职, 行为不当; malady ['mælədi] n. 病, 疾病, 弊病; malodorous [ˌ ...
- Ubuntu+caffe训练cifar-10数据集
1. 下载cifar-10数据库 ciffar-10数据集包含10种物体分类,50000张训练图片,10000张测试图片. 在终端执行指令下载cifar-10数据集(二进制文件): cd ~/caff ...