第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
|
|