配色: 字号:
基于Hadoop的分布式搜索引擎关键技术
2017-03-29 | 阅:  转:  |  分享 
  
第26卷第4期

2011年8月

北京信息科技大学学报

JournalofBeijingInformationScienceandTechnologyUniversity

Vol.26No.4

Aug.2011

文章编号:1674-6864(2011)03-0053-04

基于

Hadoop

的分布式搜索引擎关键技术

王俊生,施运梅,张仰森

(北京信息科技大学计算机学院,北京100101)

摘要:实现了基于Hadoop的分布式搜索引擎,着重讨论了实现分布式搜索引擎涉及

的3个关键性技术:索引表的建立、分词的处理和索引前的预处理。通过实验对比了集中式搜索

引擎和分布式搜索引擎,结果表明了基于hadoop的分布式搜索引擎在处理数据方面强劲的优势。

关键词:Hadoop;分布式搜索引擎;Map/Reduce;索引表;分词

中图分类号:TP311文献标志码:A

KeytechnologiesofdistributedsearchenginebasedonHadoop

WANGJun-sheng,SHIYun-mei,ZHANGYang-sen

(SchoolofComputerofSciences,BeijingInformationScienceandTechnologyUniversity,Beijing100101,China)

Abstract:Tosolvethebottleneckproducedbythecentralizedsearchengines,moreandmorepeo-

plearenowdoingresearchesbyusingdistributedtechnologies.Adistributedsearchengineisrealizedby

Hadoopinthispaper.Thenthreekeypointsaboutdistributedsearchengineareanalysed,includingthe

buildingofindextable,theprocessingofsegmentationandpreprocessingofindextable.Finally,experi-

mentscomparingthecentralizedsearchengineanddistributedsearchengineshowsthestrengthofdistrib-

utedsearchenginebasedonHadoopindealingwithdata.

Keywords:distributedsearchengine;Hadoop;Map/Reduce;indextable;segmentation

收稿日期:2010-03-03

基金项目:国家自然科学基金项目(60873013);北京市自然科学基金B类重点项目(KZ200811232019)

作者简介:王俊生(1985—),男,山西忻州人,硕士研究生,研究方向为分布式计算。

0引言

随着互联网的迅猛发展,人们已经越来越依赖

网络来获取信息,搜索引擎的出现在人们与海量网

络信息之间架起了一道桥梁。然而,随着网络用户

的激增和网络信息呈指数性增长,网络流量急增,传

统的集中式搜索引擎出现了瓶颈。目前,分布式技

术的应用在一定程度上缓解了这个矛盾。

分布式搜索引擎主要有以下几种:1)采用Ajax

技术调用检索域中所有服务器上各自的检索程序,

然后将各服务器检索程序的检索结果统一归纳整

合,统一显示给用户

[1]

;2)采用基于策略的分布式

架构,描述了系统内部服务分布情况以及访问这些

服务应该遵守的接口,由主服务器制定和发布系统

服务访问策略

[2]

;3)采用Webservice技术实现分布

式搜索的基本原理

[3]

;4)采用P2P技术的分布式搜

索引擎

[4]



通过对以上分布式搜索引擎成果的研究,发现

这些搜索引擎采用的索引表是通过Lucene(全文检

索引擎工具包)建立的。由于Lucene建立索引表时

不支持集群环境,所以对大量文本建立索引将变得

非常耗费时间。Hadoop是一个高效、可靠和可扩展

的开源分布式计算平台,它对海量数据的处理能做

到“游刃有余”。Hadoop处理海量数据的优势很明

确:随着数据量的增加,Hadoop集群相比于单机,其

节省的时间量越来越大。例如,实验中证明,当数据

量为18GB左右时,单机耗时为Hadoop集群耗时的

4.8倍

[5]



本文采用Hadoop分布式计算框架建立索引表,

可实现网页的快速搜索。在集群环境中,首先通过

爬虫程序对网页内容进行抓取,然后通过Hadoop利

用Map/Reduce技术快速建立索引表,实现一个简

单的检索系。

1分布式搜索引擎的相关技术

设计的分布式搜索引擎由爬行子系统、索引子

北京信息科技大学学报第26卷

系统和查询子系统构成,其中索引子系统是搜索引

擎的核心模块,保证了索引表的快速建立和快速更

新,本文将Lucene的语言分析器与Hadoop的Map/

Reduce结合起来建立索引表,对用户的查询返回较

全面和完整的信息,提高了查询的效率。

1.1Hadoop

Hadoop是原Yahoo的DougCutting根据Google

发布的学术论文研究而来。根据Google的3个核

心组件Googlefilesystem(GFS)、Map/Reduce、Big

Table提出了Hadoop的hadoopdistributedfilesystem

(HDFS)、Map/Reduce和Hbase。HDFS是Google

FileSystem(GFS)的开源实现;Map/Reduce是

GoogleMap/Reduce的开源实现;HBase是Google

bigtable的开源实现。图1所示为Hadoop的体系

结构。

图1Hadoop的体系结构

其中,HDFS和Map/Reduce是2个最基础、最重要

的成员。Map/Reduce是在HDFS基础上实现的。

Map/Reduce将计算作业分成许多小的单元,同时数

据也会被HDFS分为多个小块,而且每个数据块被

复制多份以保证系统的可靠性。HDFS按照一定的

规则将数据块放置在集群中的不同机器上,以便

Map/Reduce在数据宿主机器上进行计算。

1.2HDFS文件系统

HDFS是GoogleGFS的开源版本,是一个高度

容错的分布式文件系统,它能够提供高吞吐量的数

据访问,适合存储海量(PB级)的大文件(通常超过

64MB),其原理如图2所示。

HDFS采用Master/Slave结构。NameNode(名

称节点)维护集群内的元数据,对外提供创建、打

开、删除和重命名文件或目录的功能。DataNode(数

据节点)存储数据,并提出负责处理数据的读写请

求。DataNode定期向NameNode上报心跳,NameNo-

de通过响应心跳来控制DataNode。

1.3Map/Reduce算法

Map/Reduce算法是大规模数据计算的工具,

map和reduce是它的主要思想,来源于函数式编程

图2HDFS文件系统

语言。所谓的Map/Reduce,其实分为映射(map)和

规约(reduce)2步,其原理如下:

map负责将数据打散,reduce负责对数据进行

聚集,编程只需实现map和reduce两个接口,即可

完成TB级数据的计算。HadoopMap/Reduce的实

现也采用了Master/Slave结构。

Master又可以叫做JobTracker,而Slave也可以

叫做TaskTracker,提交的计算叫做job。每一个job

会被划分成若干个tasks,JobTracker负责job和

tasks的调度,而TaskTracker负责执行Tasks。如表

1所示。

表1Map/Reduce说明

函数输入输出说明

map〈k

1

,v

1

〉〈k

2

,v

2



将输入键值对(k

1

/v

1

)映射到一组中

间格式的键值对(k

2

/v

2

)集合。

reduce〈k

2

,v

2

〉〈k

3

,v

3



将与一个k

2

关联的一组中间数值集

归约(reduce)为一个更小的数值集。

基于Map/Reduce计算模型编写分布式并行程

序非常简单,程序员的主要编码工作就是实现map

和reduce函数,其他并行编程中的种种复杂问题,如

分布式存储、工作调度、负载平衡、容错处理、网络通

信等均由Map/Reduce框架(如Hadoop)负责处理。

2分布式搜索引擎的关键技术实现

分布式搜索引擎中索引表的建立、中文分词和

检索预处理是影响搜索的3个关键点,为此就这些

方面提出了解决方案。索引表利用Map/Reduce处

理,中文分词用Lucene进行二元分词,最后为了提

高检索的效率对索引表做预处理。

2.1索引表的建立

搜索引擎中倒排索引用HadoopMap/Reduce来

完成。在处理大数据集时,Map/Reduce有效地解决

了集中式系统性能下降的瓶颈。首先,map函数分

析一个抓取来的正排索引文档,对正排文档进行处

45

第4期王俊生等:基于Hadoop的分布式搜索引擎关键技术

理,产生(Word,文件名称)序列,然后reduce函数在

对相同Word的所有序列组进行合并排序处理,产

生(Word,文件列表),其中的输出组,就产生倒排索

引文档。图3为索引表建立的类图。

图3索引表建立的类图

本文利用Hadoop提供的分布式计算框架,修改

了TextInputFormat、mapper和reduce三个类。在整

个Map/Reduce过程中,map(Mapper中的方法)的

输入是关键,需要在map的输入中包含文件名这一

数据,所以需要对map输入格式进行规定,将Tex-

tInputFormat中的LineRecordReader类重写,重载其

creatKey和creatValue方法,实现了将<关键字,文

件名〉作为map的输入。最后,还要将redcue的re-

duce方法重载,把map输出的结果进行组合。将

TextInputFormat、Mapper和reduce交给job。

JobConfconf=newJobConf(InvTalbe.class);

……

conf.setInputFormat(MyInputFormat.class);

conf.setMapperClass(map.class);

conf.setReduceClass(reduce.class);

……

2.2分词的处理

由于要建立的文本中含有大量的汉字和英文以

及其他一些字符,所以需要对文本的内容进行去噪

处理,将文本中HTML标签和标点符号用””代替,

最后对预处理后的文本进行中文分词的处理。对于

中文分词,使用Lucene和外部分词器CJKAnalyzer,

将文本按二元分词法拆分。例如,输入“中华人民

共和国”,分词后输出“中华华人人民民共共和

和国”。

在实现过程中,在map阶段对文本进行分词处

理,部分代码如下:

Stringline=value.toString();

line=parseLine(line);

output.collect(word,summary);

summary.set(key.toString());

Analyzeranalyzer=newCJKAnalyzer();

Readerr=newStringReader(line);

StopFiltersf=

(StopFilter)analyzer.tokenStream(″″,r);

Tokent;

while((t=sf.next())!=null){

word.set(t.termText());

}

有了map阶段对文本的分词处理,reduce函数

在对相同Word的所有序列组进行合并排序处理,

产生(Word,文件列表),所有这样的输出组就产生

倒排索引文档。其中reduce输出结果为{key,

filename},如图4所示。

Map/Reduce通过把大规模数据集分割成小块

文件并分发给网络中的其他节点进行运算处理,然

后每个节点会周期性地把运算结果返回,从而达到

分布式处理的目的,解决了大规模数据处理效率问

题。在倒排索引文档的构建中,Spitter把大规模的

正排索引文档数据集进行分块,然后分发到不同的

55

北京信息科技大学学报第26卷

机器上进行map处理,产生各自的倒排索引文档,

最后reduce再把这些索引文档进行合并处理,生成

统一的倒排索引文档,这样就利用分布式解决了集

中式处理效率问题的瓶颈。

图4索引表内容

2.3检索前的预处理

为了提高检索的效率,先对索引表进行预处理。

进行预处理前的索引表形式是〈关键词,文件名〉,

对该索引表建立哈希表HashMap。该哈希表的建立

方法是读入索引表中每一个〈关键词,文件名〉匹配

对,将〈关键词,偏移量〉存入HashMap,其中关键词

是指索引表中关键词,偏移量则是指该关键词在索

引表中相对于文件开始位置的字符位置(表示该关

键词前面读入了多少个字符)。主要实现如下:

Stringstr=″″;

Longpos=0;

while((str=in.readLine())!=null)

{

byte[]tmp=str.getBytes();

intfirst=str.indexOf(″\t″);

StringBuffername=newStringBuffer();

for(inti=0;i〈first;i)

{

name.append(str.charAt(i));

}

index.put(name.toString(),newLong(pos));

pos=pos+tmp.length+1;

}

当用户查询关键字时,即在HashMap表中找该

关键字,如果有就返回该关键字在索引表中的偏移

量;若没有则返回NULL。接着通过偏移量定位到

要查询的关键字在索引表中的位置,读入该条记录

再返回包含该关键字的文件列表,最后根据文件列

表将文件内容部分显示出来,这样便完成了一次

查询。

3系统测试与分析

本文中实现的分布式搜索引擎是在Hadoop集

群运行环境下完成运行与测试的。这里使用6台

PC机搭建Hadoop集群,机器名分别为master、slave1-

slave5,其中master为NameNode和JobTracker,其他

5台机器为slaves,它们既作为DataNode也作为

TrackTracker。操作系统为Ubuntu9.04,Had00p版

本hadoop-0.20.1,Java版本1.6.0,eclipse3.5.1。

本分布式搜索引擎通过爬虫程序,抓取新浪5

月份的新闻,初始化URL为http:∥news.sina.com.

cn,测试数据如表2所示,最终搜索结果界面如图5

所示。

表2测试结果

总的页面

数/页

总的文件

大小/MB

索引表建立

时间/ms

6992.0

集中式分布式

288708264052

图5搜索引擎界面

通过对结果的对比分析可以看出,分布式搜索

引擎在搜索效率方面得到了一定的提高,可以预见

的是随着集群中节点数量的增加,搜索性能还可以

得到进一步提升。

(下转第61页)

65

第4期赵涟漪等:玻璃缺陷在线检测系统的研究

2.4.3玻璃缺陷类别判断

上述特征参数被用来描述缺陷的形状。对于不

同形状的区域,参数各不相同,以此判别出缺陷的类

别。根据实验结果,本测量系统初步选定结石缺陷

的圆形度值为C∈[0.23,0.46],伸长度值为T∈

[0.91,1.22];划痕圆形度值为C∈[0.023,

0.057],伸长度值T∈[3.01,9.54]。

实验结果如表1所示。

表1玻璃缺陷检测结果

样本圆形度伸长度类别

10.03968.7798划痕

20.24690.9183结石

3结束语

针对国内玻璃生产企业的技术需求,对图像处

理关键性技术的理论算法和系统进行了研究,提出

了玻璃质量在线检测系统的总体方案和设计思路,

重点阐述了图像处理分析流程和图像处理方法。在

对图像进行预处理的基础上,提出了一种自适应阈

值选取算法,采用形态学上的开、闭运算结合常见缺

陷的特点,通过系统提出的处理方法有效地实现了

玻璃缺陷类型、数量及位置的辨识,能够为玻璃生产

中冷端自动控制提供分类、分级、优化切割和自动堆

垛提供准确信息。

参考文献:

[1]朱高杰,苏智剑,王瑞.基于EVM的玻璃缺陷实

时检测系统的软件设计[J].计算机测量与控

制,2010,18(10):56-69

[2]余文勇,周祖德,陈幼平.一种浮法玻璃全面缺

陷在线检测系统[J].华中科技大学学报,

2007,35(8):15-19

[3]喻宾扬,王召巴,金永.玻璃缺陷检测新方法的

研究[J].传感器与微系统,2008,27(8):3-5

[4]贾小军,喻擎苍.基于开源计算机视觉库

OpenCV的图像处理[J].计算机应用与软件,

2008,25(4):276-278

[5]徐珂,朱煜.一种在线检测实时图像处理系统

的实现[J].微计算机信息,2008,24:8-13

[6]常城,李天剑,敖勤,等.基于图像处理的布氏

硬度测试系统研究[J].北京信息科技大学学

报,2010,25(1):74-77

[7]GranittoPabloM,NavoneHugoD.Weedseedsi-

dentificationbymachinevision[J].Computersand

ElectronicsinAgriculture,2002,33(2):91-103

(上接第56页)

4结束语

在本次实现中,Hadoop体现了在海量数据处理

方面的强劲优势。本文中仅简单地实现了基于Ha-

doop的搜索引擎的框架,着重探讨了其中一些关键

问题,仍存在一些可以改进的方面,例如分词方法的

选取会影响搜索的结果精准性。本搜索引擎使用

Lucene和外部分词器CJKAnalyzer进行分词,这种

分词方法对二元关键字有较好的结果,对单词或多元

词则没有显著的效果;爬虫目前采用的是非分布式的

方法。下一步的研究工作将通过构建分布式爬虫系

统,建立一个完整的分布式搜索引擎,并对检索方法

进一步优化,提高分布式搜索引擎的效率和结果。

参考文献:

[1]黄正鹏.分布式搜索引擎的设计与实现[D].上

海:华东师范大学,2008

[2]李伟.分布式搜索引擎设计与实现[D].安徽:

中国科学技术大学,2006

[3]贺光义.罗莉.分布式搜索引擎的设计与实现

[J].计算机应用,2003,23(5):83-85

[4]王文明.基于P2P的分布式搜索引擎的研究

[D].天津:天津大学,2007

[5]曾理.王以群.Hadoop集群和单机数据处理的

耗时对比实验[J].信息科学,2009,19:55-56

16

献花(0)
+1
(本文系关平个人图...首藏)