引言
随着信息化的不断深入,互联网飞速发展,传统的集中式搜索引擎难以满足人们对于快速检索信息的需求。云计算技术的发展给搜索引擎带来了新的机遇。针对中小型机构资金与能力不足,难以实现高效搜索,本文以局域网分布式处理为立足点,首先介绍了云计算平台 Hadoop 和分布式处理模型MapReduce,在此基础上,设计了包括分布式爬虫子系统、分布式索引子系统、检索子系统、管理控制子系统的分布式搜索引擎系统,实现局域网搜索引擎的分布式处理、可扩展性和可靠性,适合于高校和中小型企业内部的网络搜索服务。实验结果表明,相比较于传统的单机集中式搜索引擎,该系统在搜索效率上有明显提升。
一、相关理论知识
1.1 Hadoop 云计算平台。云计算[1]的特征主要有以下几点:云计算平台由大规模的廉价服务器支撑;应用程序与底层服务协作开发;使用廉价服务器进行数据资源的冗余存储并通过软件来保证云计算平台的高可用性。Hadoop[2-3]是 Apache 旗下的开源分布式处理平台,核心技术主要包括:Hadoop Distributed File System(分布式文件系统)和 MapReduce( 分布式处理 ) 模型。HDFS 通常部署在低廉的硬件集群上,进行大数据的可靠存储与冗余备份,具有高容错率和高传输率。MapReduce 模型将数据扩展到多个计算节点上进行处理,而后进行汇总。HDFS 与 MapReduce紧密集成,使得Hadoop能够对大数据进行有效的分布式处理,形成高效、可靠、可扩展的软件框架。
1.2 MapReduce 分布式处理模型。MapReduce[4-5]是一种高效的分布式编程模型,是一种用于处理和生成大规模数据集的实现方式,主要包括两个过程:Map(映射)阶段,系统将处理一系列由键值对(key/value)构成的输入,并产生键值对类型的中间结果;Reduce(化简)阶段,reduce 函数将处理具有相同键值的中间数据的集合,最后将结果输出,其流程如下:map(keyin, valuein) list (keyout,Valueintermediate)reduce( keyout, list(valueintermediate)) list(valueout)MapReduce 执行结束之后将会产生与 Reduce 任务数目相当的输出文件,最终的结果也将存放在这些文件中。通常,程序不会直接将这些文件进行合并,而是将它们作为另一个MapReduce 程序的输入数据进行继续处理。
二、系统设计与功能实现
2.1 系统总体架构设计。本文结合中小型机构局域网的实际需求,搜索引擎系统主要由四个子系统组成:分布式爬虫子系统、分布式索引子系统、控制子系统、查询子系统,其架构如图 1 所示:
分布式爬行子系统:主要负责通过 HTTP 协议对网页进行抓取,提取网页链接并进行分析、更新待抓取 URL 库,对抓取到的所有网页进行分布式存储。
分布式索引子系统:对抓取到的网页的 URL、网页标题进行提取,对文本进行中文分词[6]处理,对网页建立索引,并对索引表进行储存。
检索子系统:实现内容查询和前台搜索界面,对用户检索关键词进行解析,检索出数据库中匹配文档,并对网页进行排序,将结果返回给用户。
控制子系统:对搜索引擎系统本身的安全和相关内容的访问控制,对用户身份进行认证和访问权限控制,对搜索引擎集群环境进行管理和监控,实现搜索引擎的安全性。
2.2 系统功能实现
2.2.1 分布式爬虫实现。网络爬虫从种子 URL 集开始抓取网页,逐层解析子链接,递归的抓取并保存网页,直到抓取到所有符合内容的网页。本文利用 Nutch 的 Crawler 来完成网页的抓取任务,用 Java 实现爬虫的多线程执行[7],并基于分布式处理模型 MapReduce 进行 URL 的解析和更新,基于 HDFS 进行 URL 的存储。爬行子系统的网页下载任务以Crawler 类作为入口,并依次调用 Inject 模块,Generate 模块,Fetch 模块,Parse 模块和 Update 模块相关类和接口。表 1 为分布式爬行器主要功能类:【1】
对分布式爬虫节点的任务分配,由 NameNode 向各个DateNode 分配抓取任务并实现系统爬行任务的负载均衡。
2.2.2 分布式索引实现。基于 Hadoop 建立分布式索引集群,并在索引的上层建立静态缓存来提高用户检索效率,其框架为图 2:【2】
将 网 页 数 据 库 中 的 文 档 进 行 MapReduce 处 理 成<Key,Value>类型,其中Key为网页的URL,URL为网页内容。
由 Master 分配若干个独立运行的 Map 任务到集群中的若干个节点上去执行,生成文档的索引,利用 HDFS 存储这些分散的索引在集群中的节点上,再由若干个 Reduce 任务合并这些索引来创建倒排索引。
此外在分布式索引子系统的上层,设计了静态缓存系统。
对高频词汇和常用词汇采用哈希表保存其关键词和相关附加信息。
三、实验部署与测试
本文基于 Hadoop 集群环境下测试的,实验由 4 台 PC 搭建集群环境,分别命名为 Master,Slave1、Slave2、Slave3,其中 Master 作为 NameNode 和 JobTracker 节点,其余 3 台作为 DateNode 和 TaskTracker 节点,节点之间由 100M 网互联,操作系统为 Linux,Hadoop 版本为 Hadoop-0.20.2,Java 采用JDK1.6.0.43,爬虫采用 Nutch-1.2 的 Crawler,Tomcat7.0 版本,基于本校网站为实验对象 ,实现分布式搜索,结果表明实现的搜索引擎在搜索时间及搜索效率方面优于传统的搜索引擎。
四、小结
本文基于 Hadoop 搭建了一个搜索引擎集群,设计了一个分布式搜索引擎系统的整体架构,该系统集成了四个相对独立的子系统,该系统适用于中小型机构,具有良好的可扩展性与安全性。
参考文献
[1] 陈康 , 郑纬民 . 云计算:系统实例与研究现状 [J]. 软件学报 ,2009,20(5):1337-1348.
[2] 胡彧 , 封俊 .Hadoop 下的分布式搜索引擎 [J]. 计算机系统应用 ,2010,19(7):224-225.
[3] 杨建丹 . 基于云平台的分布式索引与检索系统的设计与实现[D]. 东北大学硕士学位论文 ,2011,14-15.
[4] 李航 . 基于 Hadoop 的分布式搜索过程研究 [J]. 信息与电脑 ,2014,5:141-142.
[5] 王俊生 , 施运霉 , 张仰森 . 基于 Hadoop 的分布式搜索引擎关键技术的研究 [J]. 北京信息科技大学学报 ,2011,26(4):53-55.
[6] 旷文科 . 基于分布式计算的搜索引擎关键技术研究与实现 [D].西安电子科技大学硕士学位论文 ,2013,16-18.
[7] 范晨曦 . 基于 Hadoop 的搜索引擎的研究与应用 [D]. 浙江理工大学硕士学位论文 ,2013,29-38.