热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

最近和寝室的同学一起搭建了Hadoop的集群,实现了一个简易的本地搜索引擎,并且将其开源到了github上:https:github.comifudingsearch-1047,接

最近和寝室的同学一起搭建了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作一些必要的文本预处理,可参考我下一篇博文具体分析。。。

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


推荐阅读
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 数字资产量化交易通过大数据分析,以客观的方式制定交易决策,有效减少人为的主观判断和情绪影响。本文介绍了几种常见的数字资产量化交易策略,包括搬砖套利和趋势交易,并探讨了量化交易软件的开发前景。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
author-avatar
xh7212176
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有