基于Nutch和Hadoop的简易搜索引擎

最近和寝室的同学一起搭建了Hadoop的集群,实现了一个简易的本地搜索引擎,并且将其开源到了github上:https://github.com/ifuding/search-1047,接下来的几篇博文将对这个项目及其代码作一些详细的描述。

搜索原理概述

“搜索”,简而言之就是要分析用户输入然后输出给用户已经排好序的URL集合。一个简单的实现所需要的排序依据主要就是文本检索以及url的PageRank值。

PageRank

PageRank算法有很多文章对其进行讲解,其模型类似一个马尔科夫链。如果一个高PageRank值的网页1指向了另一个网页2,则可以认为网页2的PageRank值也会相应的变高。

假设有n个src网页指向一个target网页,则我们认为:

Pr[target]=1-dampFac+dampFac*sum{Pr[src]/OutlinkNum[src]}

其中,dampFac是为了防止死链和陷阱的。

所谓死链就是所有的url指向了一个url,但是此url没有出链,则最后所有网页的Pr会收敛到0。如果此url有指向自己的循环,则最后除了此url其它url的Pr的值都会收敛到0。

所以在公式里面加入了阻尼因子dampFac,模拟上网者的真实行为,即你可以以dampFac的概率选择进入此网页,或者以1-dampFac的概率离开此网页。借此避免以上两种错误的收敛情况。

文本检索

文本检索有专门的NLP分析方法,在本项目中暂时采用简单的文本匹配和计数技术。

Nutch爬虫

Nutch的开发就是为了搜索引擎,Hadoop最开始只是Nutch的一个子项目。

在此次的项目中我们没有过多地关注Nutch的部分,只是使用了Nutch爬取的一部分输出,准确的说是url的链接信息“linkdb”和网页文本信息“parse_text”。因为它们都是MapFile的文件格式,为了更方便地作为Mapper的输入我们需要对以上文件做一些必要的转换和脚本处理。

Hadoop

Hadoop实现了分布式文件系统HDFS以及基于Mapreduce的分布式计算。

当你在Linux下安装好Hadoop,以伪分布式打开Hadoop后,利用jps查看可以看到如下6个进程,除了Jps其它5个就是Hadoop守护进程:

14779 DataNode
15322 NodeManager
14657 NameNode
15194 ResourceManager
17656 Jps
14979 SecondaryNameNode

其中NameNode,SecondaryNameNode以及DataNode就是负责HDFS的进程,NameNode保存文件的分片索引,管理所有的文件目录,SecondaryNameNode是它的副本。DataNode只保存分片的文件,并且有分片文件的节点才会执行Mapper和Reducer。

而ResourceManager和NodeManger就是控制job和Task的。运行一次Mapreduce就是一次job,而job又分很多次Task来执行。每个task又分为map task和reduce task。

详细的讲解以及Mapreduce job的运行机制可参考《Hadoop权威指南》。

有了以上基础知识,可按照以下步骤具体实现:

  1. 安装好Nuch和Hadoop(没有Linux基础的同学,说起来都是泪)
  2. 利用Hadoop运行样例程序,可参考:http://blog.csdn.net/dingzuoer/article/details/44725869
  3. 利用Nutch爬取网页,生成需要的linkdb和parse_text。
  4. 接下来就需要为了实现PageRank作一些必要的文本预处理,可参考我下一篇博文具体分析。。。
时间: 2024-10-09 00:21:49

基于Nutch和Hadoop的简易搜索引擎的相关文章

全文索引-lucene,solr,nutch,hadoop之nutch与hadoop

全文索引-lucene.solr.nutch,hadoop之lucene 全文索引-lucene.solr,nutch,hadoop之solr 我在去年的时候,就想把lucene,solr.nutch和hadoop这几个东东给具体的介绍下,但因为时间的关系.我还是仅仅写了两篇文章,分别介绍了一下lucene和solr,后来就没有在写了,但我心里还是期待的,尽管到如今我没有真正搞过nutch和hadoop实战项目,但公司立即就要做hadoop大数据的监控了.我一直都说,要做一个有准备的人,因此我从

全文索引之nutch与hadoop(转)

原文:http://blog.csdn.net/chaofanwei/article/details/39476535 全文索引-lucene,solr,nutch,hadoop之lucene 全文索引-lucene,solr,nutch,hadoop之solr 我在去年的时候,就想把lucene,solr,nutch和hadoop这几个东东给详细的介绍下,但由于时间的关系,我还是只写了两篇文章,分别介绍了一下lucene和solr,后来就没有在写了,但我心里还是期待的,虽然到现在我没有真正搞过

基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档

基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档 内容来源于开源项目: http://git.oschina.net/xautlx/nutch-ajax https://github.com/xautlx/nutch-ajax 如何阅读本文档 本教程文档原始基于Markdown编写,如果你熟悉Markdown文件及相关工具使用,可以直接通过Markdown阅读或编辑工具查看本教程.md格式文件. 由于Markdown语法暂时没有目录支持,如果希望以目录导航方式查看文档,可参考如下

基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口

对于hadoop HDFS 中的所有命令进行解析(其中操作流程是自己的想法有不同意见欢迎大家指正) 接口名称 功能 操作流程 get 将文件复制到本地文件系统 .如果指定了多个源文件,本地目的端必须是一个目录. (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得文件名(或大文件元数据信息): (2)根据文件名(或大文件元数据信息)到相应的Data server中获取相应的文件(大文件需要拼接): (3)将获取的文件写入本地文件系统. put 从本地文件系统中复

搭建基于MyEclipse的Hadoop开发环境

前面我们已经搭建了一个伪分布模式的Hadoop运行环境. 我们绝大多数都习惯在Eclipse或MyEclipse中做Java开发,本次随笔我就教大家如何搭建一个基于MyEclipse IDE的Hadoop开发环境. 闲话少说,走起! 第一步 安装MyEclipse的Hadoop插件 1 打开MyEclipse,查看是否已经安装过 window  ->  preferences 没有显示Hadoop Map/Reduce,所以说明是MyEclipse是没有安装过Eclipse的插件. 首先,确认你

C语言基于GTK+Libvlc实现的简易视频播放器

小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易视频播放器的博文.简易播放器,你值得拥有~ 友情提示:这里只是前篇,只是一些简单的功能,其他功能将会在后篇为大家介绍-- C语言基于GTK+Libvlc实现的简易视频播放器 一.课程说明 如果你学习过之前上线的pygtk实现有道词典的项目课,那应该对gtk的使用有一些了解了,这个项目课学起来会相对轻松一些. 关于Gtk或

Windows 7中的VirtualBox中的Ubuntu 14.04中基于Docker安装Hadoop

1. 在VirtualBox中安装Ubuntu 14.04 2. 在Ubuntu 14.04中安装Docker 3. 安装基于Docker的Hadoop 下载image docker pull sequenceiq/hadoop-docker:2.6.0   运行container docker run -i -t sequenceiq/hadoop-docker:2.6.0 /etc/bootstrap.sh –bash   测试Hadoop(将ubuntu的内存调到2G,即2048MB,否则

进程交互-基于NOR Flash的嵌入式简易文件系统设计(3)

DIR 基于NOR Flash的嵌入式简易文件系统设计 PAGE 进程交互 SN 003 Version 000.000.001待完成 Author David Lin E-mail [email protected]     [email protected] Blog http://blog.csdn.net/linpeng12358 免责声明 本文不涉及本人所在公司任何项目,输出自本人在阅读Linux0.12源码及<Unix操作系统设计>过程中的心得体会,不存在任何泄露公司文件或者机密问

基于lucene 4.7的迷你搜索引擎

接上一篇 lucene 4.7 试用  完善了项目. 源码已经上传 点击下载 TextFileIndexer.java 用来建立索引,支持选择不同的分析器analyzer. Demo.java用来运行搜索引擎. (运行时,注意配置自己的索引目录.) 另外,由于版权问题,拿来建立索引的Json文件这里就不提供了,可以自行编写几条来建立索引. 基于lucene 4.7的迷你搜索引擎