互联网的出现改变了我们的工作,学习乃至生活方式,其丰富的资源为我们提供了大量的信息,然而由于缺乏行之有效的整合标准和手段,目前这些资源的分布呈现高度分散状态,内容庞杂无序,结构化程度低,用户往往难以快速准确地获取自己需信息。所以研究和设计出针对资源搜索的系统平台,以提高用户获取资源信息的速度和准确度有着非常重要的意义。而Hadoop作为新一代的分布式计算框架,非常有利于处理“网络大数据”。中国电信、中国移动、淘宝、Facebook 和Yahoo均有成功应用。
1 Hadoop概述
Apache Hadoop 是一个用java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,由pig,HIVE,Chukwa,ZooKeeper,HBASE,MAPreduce,HDFS等组成。如图1所示。本资源搜索系统主要使用了HDFS,HBASE,MAPreduce。
1.1 Hadoop体系架构
图1 Hadoop体系架构
1.2 HDFS——分布式文件系统
HDFS是一个高度容错性的分布式文件系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,其主要由Client、DataNode和NameNode三部分组成,其中,Client是面向用户的分布式文件系统应用程序;DataNode是存储在本地文件系统中的文件块单元,在存储文件块的meta-data的同时,向NameNode周期发送所存储的文件块信息;NameNode是分布式文件系统中的管理者,负责管理文件系统的存储块复制,集群配置信息,命名空间等。
1.3 MapReduce——映射、化简编程模型
MapReduce是一种编程模型,用于大规模数据集的并行运算。Map(映射)和Reduce(化简),采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后再把计算结果合并,从而得到最终计算结果。多节点计算,所涉及的任务调度、负载均衡、容错处理等,都由MapReduce框架完成。
1.4 HBASE——分布式数据存储
HBase— Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统;HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持,MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制;Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的简单。
2 系统设计
2.1系统体系结构
图2 系统体系结构图
在Browser/Server三层体系结构下,为了真正实现数据存储、计算、用户体验的分离,将资源搜索系统分成三个独立的层。分别是数据存储层、逻辑层、表示层。
1) 数据存储计算层:该层由Hadoop平台实现,选用Hadoop组件中的HBase作为存储数据库,实现分布式数据存储,该层主要是负责存储整个搜索引擎的底层结构化数据,主要包括两个大规模的数据库,一是面向客户查询的信息的读取,二是面向爬虫所得页面与抽取信息的写入;为了提高存储Capacity和计算效率,在Hadoop平台中选择多个数据节点DataNode。
2) 逻辑层:该层是实现数据存储计算层与表示层的纽带,对关键算法(如搜索算法、聚焦爬虫等)的设计至关重要,在设计中,特别要考虑算法的可扩展性、可重用性、可维护性和健壮性等。
3) 表示层:该层是实现系统与用户的一个人机接口,可以生成用户访问的Web页面,向普通用户提供查询界面,向管理员提供后台服务页面。
2.2 数据整合设计
Hadoop云计算平台是利用MapReduce进行切分和整合数据,MapReduce对数据进行整合的逻辑模型如图3所示。
图3 MapReduce 的逻辑模型图
在进行MapReduce操作时,首先对MapReduce程序运行前的参数进行配置,根据输入数据的大小和参数的设置把数据分成M个分段, 每个分段对应一个map线程;然后,编写Map函数,将分段中的数据作为Map的输入,实现[Map:(in_key,in_value)->{(keyj,valuej)|j=0...M-1}];接着, Map的输出到Reduce,在map端完成内存→排序→写入磁盘→复制,在reduce端完成映射到reduce端分区→合并→排序;最后,将排好序的key/value作为Reduce的输入,经过Reduce计算输出结果,实现[Reduce:(key,[value1,...,valuem])->(key,final_value)|j=0...R-1}]。
如在计算URL访问频率中,Map函数首先处理日志中web页面请求的记录,然后输出(URL,1),Reduce函数把相同URL的value值都累加起来,产生(URL,记录总数)结果。
2.3 网络爬虫设计
网络爬虫是一种自动搜集互联网信息的程序,通过实现爬虫程序,可以搜集某一站点的URLs(网页地址),并将搜集到的URLs存入数据库,其不仅能够为搜索引擎采集网络信息,而且可以作为定向信息采集器,定向采集某些网站下的特定信息,如招聘信息,租房信息等;系统采用开?源?网?络?蜘?蛛?(?S?p?i?d?e?r?)?,SPIDER工作过程如图4所示。采集中每遇到一个页面,都需要判断该页面的URL是否已发现的url,若不是新发现的url,则将其丢弃;否则将它放入待采集url队列。系统采用美国哈佛大学教授拉宾(Rabin)提出的Rabin指纹算法。
1) 假设[A([吧 b1,b2…,bm ])]是包含m个二进制字符的二进制字符串,那么可以根据A构造相应的(m-1)度的多项式如下,其中t是不定元,即:
[A(t)=b1tm-1+b2tm-2+...bm-1t+bm] (1)
给定一个度为k的多项式P(t):
[p(t)=a1tk+a2tk-1+...+ak-1t+ak] (2)
那么A(t)除以P(t)的余数f(t)的度数为(k-1),对于给定的字符串A,定义A的指纹f(A)如下:
[f(A)=A(t)mod P(t)] (3)
如果字符串A的指纹不同于字符串B的指纹,那么字符串A也不同于字符串B:f(A)≠f(B)=>A≠B 。
2) 构造向量[(x0,x1...xi...xn)] [xi=0,1,2,...n] 其中[i]为整数且[i∈0,max(rabincode)],初始值都设置为0,然后用Rabin算法计算url的指纹,并将得到的二进制序列映射成整数i,最后用i作为向量的下标判断[xi]的值,如果 [xi=0],则此url未被访问过,将[xi]的值设置为1;如果[xi=1],则此url已经被访问过,将其丢弃。
3 实验与数据分析
3.1 开发平台及其开发工具
为了测试所
设计的基于Hadoop云计算平台的资源搜索系统的性能,在实验中搭建了Hadoop集群, Hadoop集群采用4台服务器,分别是3台Datanode和1台Namenode,Client通过Namenode来提交数据。4台集群服务器配置信息为linux(CentOS 5.4) +Hadoop(0.20.2) +Java (Version 1.6.0_17) +CPU(Intel 酷睿2 双核 E7500 @2.93GHz)+NetWork(NetLink BCM5784M Gigabit Ethernet)+Memory 2G(Hard Disk 320G/7200)。
3.2 实验结果分析
表1 Hadoop版本系统和Oracle系统耗时测试数据
[数据量(万)\&基于Hadoop平台(秒)\&Oracle单机测试(秒)\&节约时间(秒)\&10\&1.0\&0.9\&0.1\&500\&3.0\&7.7\&4.7\&1000\&10.2\&30\&18.8\&2000\&15\&49\&34\&5000\&21\&84\&63\&]
实验结果表明:数据量小的时候(10万),Hadoop版本系统和Oracle系统耗时差不多,而数据量很大的时候(5000万),Hadoop版本系统比Oracle系统节约很多时间,这说明随着数据量的不断增大,Hadoop版本系统节约的时间越多,优势越明显。
(下转第4480页)
(上接第4465页)
4 结束语
随着Internet的迅猛发展,传统单机处理数据的方式已经难以满足Internet数据的爆炸式增长,新的分布式数据处理技术也日益成熟,其取代传统单机处理数据的方式已经成为必然,在当前的海量处理和存储技术中,Hadoop平台成为云计算的首选,基于此,结合资源垂直搜索领域,使用Hadoop分布式平台设计出搜索效率、准确率较高的资源搜索引擎,具有十分重要的意义。
参考文献:
[1] 江建举.基于 Hadoop 平台的海量文件存储策略研究[J].深圳职业技术学院学报,2014(3).