论文部分内容阅读
近年来随着社交网络和语义网络的兴起,海量数据挖掘成为学术界和工业界关注的焦点问题。在大规模数据的分析计算中,单台服务器的存储和计算能力已无法满足其对数据量和计算复杂度的需求。Apache基金会开发的开源项目Hadoop作为一种流行的分布式计算平台,在很多涉及海量数据挖掘的产品和应用中发挥着重大作用。在传统的单机数据挖掘算法的实现中,数据集中存储在本地硬盘上,在计算时读入内存中相应的数据结构里,辅以一些高效的索引。在算法执行过程中程序反复的读取内存中的数据进行计算,最终输出结果到本地硬盘,控制台或远程客户端。对于单机算法来说,我们只需考虑算法的有效性,时间空间复杂度,数据结构的选择和结果的展示。随着数据量的增加,单台服务器的硬盘无法存储全部的输入输出数据,内存也无法容纳下计算中所产生的中间数据,这时一种行之有效的方法是将单机算法改造成分布式算法,利用多台机器进行分布式并行计算。在算法的分布式移植过程中需要考虑很多问题,例如数据的分布,计算的分布,结果的收集,各节点之间的网络传输,集群节点的故障恢复等等。而Hadoop分布式计算平台使开发者只需关注于计算本身,而网络通信,故障恢复都由Hadoop来负责,这样极大提高了分布式应用的开发效率。当单机算法扩展到Hadoop分布式平台上时,即成为Map(本地计算及数据再分配)->网络传输>Reduce(结果收集,合并计算)的模式。如何将原有的单机算法在Hadoop平台上予以实现对学术界和工业界来说都是一个新的挑战。在算法迁移过程中,数据如何分布,Map和Reduce的key,value执行单元的选择,如何节省网络传输的开销都是开发者需要考虑的问题。PageRank算法是谷歌公司提出的网页排序算法,用于在搜索引擎中对网页进行打分,随着互联网的发展,网页的数量以指数级增长,远远超过了单台机器的存储和计算能力。如果能将PageRank算法迁移到Hadoop上实现多机并行计算,就可以实现可扩展性,即当网页数量不断增加时,通过动态增加Hadoop集群中机器的数量,满足新的计算需求。但经过实验发现,将PageRank迁移到Hadoop上虽然满足了可扩展性的需求,但是计算效率一般,本文提出了一种在Hadoop平台上PageRank优化算法,算法的核心思想是通过图聚类改变Map和Reduce的key,value执行单元的粒度,节省Map和Reduce之间的网络传输的开销,平衡MapReduce计算资源,以提高整体的PageRank计算效率。考虑到PageRank算法的执行对象不仅有网页数据,还可能有其他的图数据,当图本身很稀疏或聚类效果不佳时,优化算法可能并不适用,本文针对上述情况建立了一个Cost Model,其目的是在PageRank迭代执行前判断优化算法的效果,如果优化效果不佳则选择原算法进行PageRank计算。本文详细阐述了如何在Hadoop平台上实现和优化PageRank迭代算法。提出了以图划分将MapReduce计算单元由图结点变为子图,以降低Map和Reduce之间的网络开销,平衡计算资源,实现整体性能提升的优化方法,为其他涉及迭代的图挖掘迭代算法在Hadoop上的优化提出了一种新的思路。