Hadoop-MapReduce下的PageRank 矩阵分块算法

来源:互联网 发布:淘宝水印字体怎么设置 编辑:程序博客网 时间:2024/06/07 07:09
李远方,邓世昆,闻玉彪,韩月阳

(云南大学信息学院,云南昆明650091)

摘要:PageRank是Web结构挖掘的经典算法,已在Google搜索引擎中取得了巨大成功。但其迭代次数多,时空消耗大,
执行速度和收敛速度都还较慢。文中详细讨论了Hadoop—MapReduce的执行流程及其内部实现机制后,提出了一种并行
MapReduce实现矩阵分块的PageRank算法,其实质是减少MapReduce框架结构中Map阶段和Reduce阶段的迭代次数,从
而减少时空开销。最后搭建Hadoop—MapReduce开源平台,模拟Web结构爬取,比较了传统算法和改进算法的性能。结果
表明,改进后的算法迭代次数低,并行效率较高,在模拟环境中PageRank标识网页等级显示其优越性。
关键词:PageRank;MapReduce;Hadoop;矩阵分块
中图分类号:TP301.6 文献标识码:A 文章编号:1673—629X(2011)08—0006—04

O 引 言
随着互联网的高速发展,许多信息隐藏在web结构信息中。要从海量信息中找到有用信息,算法的效率就显得尤为重要。PageRank 是Google排名运算法则的一部分,是用来标识网页等级或重要性的一种方法,是用来衡量一个网站好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等因素之后,Google通过PageRank来调整结果,使更具“等级/重
要性”的网页在搜索结果中网站排名得到提升,从而提高搜索结果的相关性和质量。PageRank形如投票系统一样,一个链接结构从网页 指向另一网页Y,则Y得票一次。PageRank的PR值不仅跟自己得票相关,而且跟向自己投票的网页也相关, 向Y投票, 重要就代表Y更重要。
PageRank算法描述如下:
(1)PR值具有传递性。 指向Y时, 的PR值也部分传递给Y。
(2)重要性具有传递性,一个重要的网页比一个不重要网页传递的权威更多。当考虑一个页面的所有入度和出度时,页面z的
PageRank值计算公式如下:


其中A(z)代表有链接直接指向页面Z的网页
集,即页面z的入度;PR(Z)代表页面Z的PageRan数值;Na表示网页a正向链接数量; 表示网页a将自己的PageRank值平均分配给自身的正向链接;D是阻尼系数,0<D <1,通常取0.85,由于用户在进行网页浏览时不可能按当前页面中的链接前进,而是随机跳跃到完全无关页面,则D实际上代表的是用户
跟随网页链接浏览,而不产生随机跳跃的概率值。加入阻尼系数D是能保证PageRank算法总是收敛的。

PageRank算法是在后台利用公式计算页面重要性,虽能在一定程度上反映网页的重要性,但也存在下问题:一是分辩能力还不够高,会出现误判的情况。
二是算法运行速度慢,消耗内存空间大。网页的链接信息是用邻接矩阵表示,Web页增多同时存储空间也增多,造成空间浪费。随着Internet的发展,信息量急剧增加,存储和计算网页链接信息需要并行系统的支持。PageRank并行算法已在web结构挖掘方面得到了广泛的应用。
文中提出的算法是基于开源Hadoop 框架,再将PageRank算法与MapReduce框架相结合,采取矩阵分块的方式来降低并行迭代次数,从而提高PageRank在搜索领域的实用度。
1 Hadoop-MapReduce框架介绍
MapReduce 是一个用于大规模数据处理的分布式计算模型。当用户定义一个Map函数来处理一个key/value对然后生成一批中间的key/value对,再定义一个Reduce函数将所有这些中间的有相同key的values合并起来。现实生活中有很多这种模型,Ha—doop的Map/Reduce框架也是基于这个原理实现 。一个MapReduce任务,在运行程序之前,必须保证Master节点的NameNode,SecondaryNameNode,Job—Tracker等进程和Slaves节点的DataNode,TaskTracker等进程启动,JobTracker进程和TaskTracker进程分别运行在Master和Slaves上。MapReduce首先将作业通过JobClient提交作业给Master的JobTracker,接着Job.Tracker将作业放在等待队列中 。Slaves节点TaskTracker随机地通过远程过程调用(RPC)发送询问信息,询问是否有作业任务安排。若有,JobTracker分派任务作业给TaskTracker,TaskTracker再分配具体的物理节点机执行任务.Master/Slave是一种Slave主动询问、Master被动答复的过程。。 。图1为Hadoop—MapReduce
调度过程。
整个过程分为三步:JobClient提交作业任务、Job.Tracker调度作业任务、TaskTracker分配具体节点机运行作业。详细步骤如下:

(1)JobClient提交作业任务:当用户在提交作业时,JobClient会调用静态方法runJob实例化一个Job.Client实例,然后此实例调用submitJob方法提交作业,并得到一个runningJob对象。它被用来监视作业的状态,并一直运行到作业完成。submitJob通过内部方法向Hadoop的HDFS上传以下几个文件:job.xml、job.jar和job.split。

job.xml是作业配置文件,比如是关于映射类、合并类、规约类、输入输出格式的规定;

job.jar是执行任务相关类文件集合,例如MapperClass,Re—duceClass等主要功能类;

j0b.split是关于分块信息的文件,它包括块怎么分,分为多少块(默认64M)的参数约定 。
(2)JobTracker调度作业任务:JobTracker是Ha—doop—MapReduce框架的核心。当JobTracker接到Job—Client提交的作业后,JobTracker会产生一个JobIn.Progress进程对象,它代表一个作业进程对象,并维护相应作业的相关信息。例如作业运行状态、作业运行时间等信息。同时将分配的Task节点机位置信息记录下来。JobTracker会通过offer—Service方法开启作业初始化线程,目的是初始化作业的所有任务。Job.Tracker会定义两个数组列表JobsInitQueue和JobsByPriority,并将作业进程加入到JobInitQueue和JobsByPri—ority中,然后用resortPriority()方法对作业的优先级排序(可基于不同的排序策略),然后唤醒排在第一的作业进程,准备调度相应的Task运行作业。
(3)TaskTracker分配机器运行作业任务:Task.Tracker在空闲时会调用JobTracker.AssignTask来询问JobTracker是否有任务安排,如果在等待队列中有作业
进程,JobTracker将分配作业任务给TaskTracker,并把相应的Task任务节点机启动运行任务 。
2 基于MapReduce的PageRank算法
2.1 算法的提出
当前网页信息已是一种海量数据,而相应的网页链接信息则成指数级增长,所以执行PageRank算法进行Web结构信息挖掘需要并行系统的支持。文中提出的算法将是在Hadoop上将PageRank算法与Ma.pReduce框架结合,使用矩阵分块并行迭代算法来降低迭代时问。以往计算PR值的常用方法是将页面的结构关系写成矩阵向量形式。而这些矩阵大多数空间是浪费的,最终将转化为稀疏矩阵。当互联网规模不断扩大时,Web网页数量海量剧增意味着稀疏矩阵也变为海量,传统的PR值计算方法浪费空间巨大,且运行性能差。文中利用map/reduce的并行计算方法,不仪降低了数据的存储空间问题,而且还能将Hadoop中参数blockSize的最大值改变,将沉重的负担分担给在瓦联网中的各工作节点,从而降低中心节点的负担,并能从实质上提升PageRank的算法速度。
2.2 算法改进
按照第1节介绍,Hadoop中的MapReduce计算是首先将文件系统中的结构文件进行分块处理,这一工作是Master节点来完成,之后将各分块分配给Slave来运行,在Slave上可以运行Map工作任务,也可以运行Reduce工作任务。当分块分配到Slave时,工作机按照map/reduce的设置<key,value>格式传送给主机节点。此时,Reduce任务的工作节点将Map处理的中间结果进行汇总,保存到Hadoop文件系统中。由于传统PR算法迭代时在Hadoop各集群机上传递信息需要的时间多,且上次迭代的结果都不能很好地保存。
若能设计出一种并行化的PR算法,然后移植到Ha.doop并行框架中,再使用矩阵分块的原理,将使Pag—eRank算法得到很大的改进。
具体改进如下:假设经爬取网页处理后给每个URI 一个NO标识,将形成表1的链接关系数据集。

LR代表所在行NO的链接网页序列。经查证Google网页PageRank初始阻尼系数D的值为0.85,这样的数值能保证计算结果能保持很好的收敛。改进的算法的创新点就在于不仅可以解决海量存储的问题,而且还能将Hadoop中参数blockSize的最大值改变,相应的将巨大的中心负担分担给分布在互联网中的各工作节点。实际操作时在并行执行Hadoop的第一个MapReduce阶段(Stage1),实现以下更改。图2为基于MapReduce的网页分割。

Mapper{
Map(){
// Record format:Starting point I Targeting point
Processing each record read
For each Targeting point in Record
Key(Starting point)
Value( targeting point)
Emit(key,value)}}
Reducer{
Reduce(){
Input key:Starting point,Value:list(value)
Output key:Starting point,Values(初始PageRank值,目标节
点序列)
For each value in list
Added to the sequence of the target node value
(
Pagerank values of the initjal+_1一O.85 Values.__((Pagerank
values of the initial,Sequence of the target node)
Emit(key,values)
}}


其中Mapper中的Map方法负责生成每个起始节点到目标节点的<key,value>对,key为起始节点,value为目标节点。在MapReduce框架执行的时候,程序框架集为对应的关键字汇总其值集,并罗列成一系列的值列表。下一次工作机的Reduce任务将以<key,List(value)>作为输入,逐个输出每一个关键字的值集,并赋予每个关键字的初始PR值,最后将其文件保存至Hadoop分布式文件系统中⋯。再利用矩阵分块原理,即在MapReduce下实现分块PageRank算法,将表1分块矩阵逻辑表示如图3所示。

2.3 算法的实现
Stagel(即2.2节)是数据准备和方法的引进,Stage2讲述如何将方法移入Hadoop-MapReduce,实现并行迭代。
(1)Stagel为所有的target节点输出<key:Target,value:Starting node pagerank/The number of target node> ;
(2)Hadoop—MapReduce框架归类key值相同的value值。在Reduce时,对每个key,页面把P(x)求和,并计算出新页面的PageRank。把结果保存在Ha—doop-MapReduce的HDFS中,结果值将用于下次循环执行的输入值;
(3)将Stagel与Stage2的输出结果进行合并后作为输入,继续迭代PR算法直到算法收敛。其伪代码如下:
Mapper{
Map(){
Input:key=pagex,value=(pagerank(x),links[yl,⋯ym1)
//x is the current page,pagerank(x),links[]is Link to the
page
Output:key=page yi,value=partialx
,, As a template
Emit(x,links[yl,⋯ym])
For each link yi{
Partialx(--pagerank(x)/m
//Output Collect(key:yl,value:partial(x))
Emit(yi,partial(x))
}f}
Reducer]
Reduce(){Input:key=page Y,value=list of[partial(x)]and
links[yl,..ym]
Output:key=pagey,value=p(x) links[yl,⋯ym]
P(x)=0
For each partial value in the list{
If(value is pagerank of the X point){
Px+=partial(x)}
else{
Record Template}
P(x)=d P(x)+(1-d)
Emit(x,p(x)links[yl,⋯ym]From the template)
}}
Mapper阶段实现为每个起始节点计算PR值,计算方式为PageRank/N。新的计算公式演变为PL( )=(1一D)+D,lc PL( )这是一个反复迭代的过程。
3 实验结果与评价由于Hadoop m 是一个并行分布式云计算开源平台,它能高效运行与之相关的并行算法。为了比较传统模型与改进模型之间的效率问题,特搭建Hadoop实
验平台,整个实验平台由10台普通PC机和一些交换设备组成,使用的操作系统为ubuntu,java环境为jdk1.6-1inux版本,Hadoop的版本为Hadoop一0.21。开发环境是MyEclipse、IBM MapReduce Eclipse插件。
(1)迭代次数比较。
实验结果表明原PageRank算法并行迭代 次将得到很好的收敛 ,新算法由于采用了矩阵分块的算法,总的迭代次数明显小于 次。然而在Hadoop—MapReduce下设计的并行PR算法需要相互传递参数值,这将耗费一定的通信时间和费用,因此运行时间并没有实质性的减少。
(2)时空消耗比较。
矩阵分块由于不设计sort操作,时间消耗将大大降低。另外分块算法减少了数据条数,且节省了用于表示网页节点的长类型记录,所以节省了大量存储和内存空间。实验结果统计时间效率提高了%7.4,而存储空间则节省了%16.57。
4 结束语
文中提出的分块算法在迭代次数和时空消耗都有很大的改进,但还存在一些不足:一方面,实验条件受限。由于个人所能支配的PC机少,不可能拥有成千上万的Pc集群节点,因此文中选取的数据集也将受到限制,也不能体现云计算带来的强大魅力;另一方面,文中提出矩阵分块PageRank算法,能最大化降低并行时间,但需要提前将与之相关的邻接矩阵保存在HDFS中,而这些邻接矩阵是牺牲存储空间为代价,空间花费比较大。


参考文献:
[1] 焦金涛.基于PageRank的Web挖掘改进算法[J].计算
机工程,2009,35(15):3l:32.
[2] 胡或,封俊.Hadoo下的分布式搜索引擎[J].计算机
系统应用,2010,19(7):24—26.
[3] Dean J,Ghemawat S.MapReduce:Simplied Data Processing
on Large Clusters[C]//Proceedings ot the 6th Conference on
Symposium on Ope rating Systems Design & Implementation
[S.1.]:USENIX Association,2004.
[4] Catanzaro B C,Sundaram N,Keutzer K.A Map Reduce
Framework for Programming Graphics Processors[C]∥Work—
shop on Software Tools for MuhiCore.[S.1.]:[S.n.],2006.
[5] Ranger C,Raghuraman R,Penmetsa A.et a1.Evaluating Ma.
pReduce for Multi—core and Multi processor Systems[C]∥
HPCA.[S.1.]:[S.n.],2007:13—24.

0 0
原创粉丝点击