一种基于Spark平台的并行序列模式挖掘方法与流程

文档序号:11230575阅读:367来源:国知局
本发明属于序列模式挖掘
技术领域
:,特别是涉及一种基于spark平台的并行序列模式挖掘方法。
背景技术
::(1)序列模式挖掘技术[文献1]最早提出序列模式挖掘的概念。序列模式挖掘就是挖掘序列数据库中频繁出现的有序事件或子序列。序列模式挖掘作为数据挖掘研究领域中重要的研究内容之一,有着很广泛的应用需求,比如用户购买行为分析、生物序列分析、出租车频繁轨迹模式发现、人类移动行为模式分析。[文献2]提出了采用冗余候选模式的剪除策略和哈希树来实现候选模式快速访存的gsp算法。[文献3]提出了基于垂直数据表示的spade算法。[文献4]提出了基于投影数据库的prefixspan算法。这些传统的串行化算法虽然随着数据结构的优化和挖掘机制的改变,在性能上有一定提高,但在面对大规模数据集时算法的处理速度往往达不到人们的要求。直到20世纪初,计算机硬件的急速发展极大的推动了并行序列模式挖掘算法的研究。国内外学者相继提出了各种分布式序列模式挖掘算法。[文献5]提出了基于树投影技术的两种不同的并行化算法来解决分布内存并行计算机的序列模式发现问题。[文献6]提出了通过语法序列树减少数据传输量的dmgsp算法。[文献7]提出了快速挖掘全局最大频繁项目集的fmgsp算法。但是由于分布式内存系统或网格计算系统这些并行平台并未提供容错机制,所以在这些并行平台上面实现的并行序列模式挖掘算法不具备容错性。此外,在这些平台上开发并行算法需要程序员具备大量的并行算法开发经验。云计算平台的出现为实现并行算法提供了新的方法和途径,使得高效低成本的从海量数据中进行序列模式挖掘成为可能。由apache基金会所开发的hadoop云计算平台由于其开源性、可扩展性、高容错性、使不具备丰富并行算法开发经验的程序员可以在hadoop平台上轻松的开发并行程序,因此很多学者提出了基于hadoop平台的并行序列模式挖掘算法。[文献8]提出了基于hadoop的并行增量序列模式挖掘算法dpsp算法。[文献9]提出了基于hadoop的并行闭序列挖掘算法-bide-mr算法。[文献10]提出了基于hadoop的spamc算法。[文献11]提出了基于hadoop的并行prefixspan算法。[文献12]提出了基于事务分解思想的基于hadoop的prefixspan并行算法。[文献13]提出了基于数据库切分的基于hadoop的dgsp算法。文献[8][9][10][11]提出的基于迭代式mapreduce任务的并行序列模式挖掘算法需要执行多个需要从hdfs中读取序列数据库的mapreduce任务,会产生很大的io开销。文献[12][13]提出的基于非迭代式mapreduce任务的并行序列模式挖掘算法并不能有效的将计算任务均匀的分派到各个计算节点,造成了负载不均衡。(2)map-reduce编程框架map-reduce是一种编程框架,采用了概念"map(映射)"和"reduce(归约)",用于大规模数据集(大于1tb)的并行运算,在[文献14]中提出。用户只需编写两个称作map和reduce的函数即可,系统能够管理map或reduce并行任务的执行以及任务之间的协调,并且能够处理上述某个任务失败的情况,并且同时能够保障对硬件故障的容错性。基于map-reduce的计算过程如下:1)用户程序中的map-reduce库首先将输入文件分成m个数据分片,每个分片的大小一般从16到64mb(用户可以通过可选的参数来控制每个数据片段的大小),然后map-reduce库在机群中创建大量的程序副本。2)这些程序副本有一个特殊的程序-主控程序,副本中其它的程序都是由主控程序分配任务的工作程序。有m个map任务和r个reduce任务将被分配,主控程序将一个map任务或reduce任务分配给一个空闲的工作程序。3)被分配了map任务的工作程序读取相关的输入数据片段,从输入的数据片段中解析出键-值(key,value)对,然后把键-值对传递给用户自定义的map函数,map函数将产生的中间临时键-值对保存在本地内存缓存中。4)缓存中的键-值对通过分区函数分成r个区域,之后周期性的写入到本地磁盘上。缓存的键-值对在本地磁盘上的存储位置将被回传给主控程序,由主控程序负责把这些存储位置再传给被分配了reduce任务的工作程序。5)当被分配了reduce任务的工作程序接收到主控程序发来的数据存储位置信息后,使用远程过程调用(remoteprocedurecalls)从被分配了map任务的工作程序所在主机的磁盘上读取这些缓存数据。当被分配了reduce任务的工作程序读取了所有的中间数据后,通过对键进行排序后使得具有相同键的数据聚合在一起。由于许多不同的键会映射到相同的reduce任务上,因此必须进行排序。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。6)被分配了reduce任务的工作程序遍历排序后的中间数据,对于每一个唯一的中间键-值对,被分配了reduce任务的工作程序将这个键和它相关的中间值的集合传递给用户自定义的reduce函数。reduce函数的输出被追加到所属分区的输出文件。7)当所有的map和reduce任务都完成之后,主控程序唤醒用户程序.在这个时候,在用户程序里的对map-reduce调用才返回。(3)spark云计算平台spark是由ucberkeleyamp实验室开发的开元通用并行云计算平台,spark基于mapreduce思想实现的分布式计算,拥有hadoopmapreduce所具有的优点;但是不同地方是运算中间输出结果能存储在内存中,从而不在需要读写分布式文件系统(hdfs),因此spark能更好的运行数据挖掘与机器学习等需要迭代的mapreduce算法。spark启用了内存分布数据集,它可以提供交互式查询,除此之外还可以将数据集缓存在内存中,提高数据集读写速率。实现计算过程中的数据集的重用,优化迭代工作负载。spark底层可使用多种分布式文件系统如hdfs文件系统存放数据,不过更多的是与资源调度平台mesos和yarn一起合作出现。rdd(弹性分布式数据集)是spark的核心,rdd是分布于各个计算节点存储于内存中的数据对象集合,rdd允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。rdd分布在多个节点上,并可以对其进行并行处理。rdd是可扩展、弹性的,在运算过程中,内存小于rdd时,可以转存到磁盘上,确保内存足够继续运算。rdd是已被分区、只读的、不可变的并能够被并行操作的数据集合,只能通过在其它rdd执行确定的转换操作(如map、join、filter和groupby)而创建,然而这些限制使得实现容错的开销很低。与分布式共享内存系统需要付出高昂代价的检查点和回滚不同,rdd通过lineage来重建丢失的分区:一个rdd中包含了如何从其它rdd衍生所必需的相关信息,从而不需要检查点操作就可以重构丢失的数据分区。尽管rdd不是一个通用的共享内存抽象,但却具备了良好的描述能力、可伸缩性和可靠性,并能够广泛适用于数据并行类应用。有关文献:[文献1]agrawalr,srikantr.miningsequentialpatterns:the11thinternationalconferenceondataengineering[c].taipei:ieeecomputersociety,1995:3-141.[文献2]srikantr,agrawalr.miningsequentialpattern:generationsandperformanceimprovement[c]//proceedingsofthe5thinternationalconferenceextendingdatabasetechnology.avignon:lecturenotesincomputerscience,1996:.3-17.[文献3]zakim.spade:anefficientalgorithmforminingfrequentsequences[j].machinelearning,2001.41(2):31-60.[文献4]peij,hanj,pintoh.prefixspanminingsequentialpatternsefficientlybyprefix-projectedpatterngrowth[c]//proceedingsofthe17thinternationalconferenceondataengineering.washington,ieeetransactionsondataengineering,2004.16(1):1424-1440.[文献5]gurainikv,gargn,vipink.paralleltreeprojectionalgorithmforsequencemining[c]//proceedingsofthe7thinternationaleuropeanconferenceonparallelprocessing.london,2001:310-320.[文献6]龚振志,胡孔法,达庆利,张长海.dmgsp:一种快速分布式全局序列模式挖掘算法[j].东南大学学报,2007.16(04):574-579.[文献7]zhangchanghai,hukongfa,liuhaidong.fmgsp:anefficientmethodofminingglobalsequentialpatterns[c].//proceedingsofthe4thinternationalconferenceonfuzzysystemsandknowledgediscovery.losalanitosieeecomputersociety.2007:761-765.[文献8]j.huang,s.lin,m.chen,“dpsp:distributedprogressivesequentialpatternminingonthecloud,”lecturenotesincomputerscience,pp.27-34,2010.[文献9]d.yu,w.wu,s.zheng,z.zhu,“bide-basedparallelminingoffrequentclosedsequenceswithmapreduce,”in:proceedingsofthe12thinternationalconferenceonalgorithmsandarchitecturesforparallelprocessing,pp.177-1862012.[文献10]chun-chiehchen,chi-yaotseng,chi-yaotseng,“highlyscalablesequentialpatternminingbasedonmapreducemodelonthecloud,”in2013ieeeinternationalcongressonbigdata,pp.310–317,2013.[文献11]p.n.sabrina,“miltiplemapreduceandderivativeprojecteddatabase:newapproachforsupportingprefixspanscalability,”ieee,pp.148-153,nov.2015.[文献12]x.wang,“parallelsequentialpatternminingbytranscationdecompostion,”ieeefuzzysystemsandknowledgediscovery(fskd),2010seventhinternationalconferenceon,vol.4,pp.1746-1750.[文献13]x.yu,j.liu,c.ma,b.li,“amapreducreinforeceddistirbutedsequentialpatternminingalgorithm,”algorithmsandarchitecturesforparallelprocessing,vol.9529,pp.183-197,dec.2015.[文献14]jeffreydeanandsanjayghemawat.map-reduce:simplifieddataprocessingonlargecluster[c]//proceedingsofthe6thconferenceonsymposiumonoperatingsystemsdesignandimplementation.newyork:acmpress,2004:137-149.技术实现要素:针对现有的串行化序列模式挖掘算法在处理海量数据时计算能力低效的问题和现有的基于hadoop的并行序列模式挖掘算法具有高io开销和负载不平衡的问题,本发明提供了一种基于spark平台的并行序列模式挖掘方法。本发明所采用的技术方案是:一种基于spark平台的并行序列模式挖掘方法,其特征在于,包括以下步骤:步骤1:数据库切分;将序列数据库切分成相同大小的数据库分片,分片数根据集群中的工作节点数来确定,使每个数据库分片中的序列总长度近乎相等;步骤2:数据库准备;利用一个mapreduce任务产生所有的1-序列模式;步骤3:数据库挖掘;迭代利用mapreduce任务发现所有k-序列模式,k>1。本发明设计了合理的序列数据库分解策略,最大限度的解决了负载不平衡的问题。在此基础上根据mapreduce编程框架的特性,对原始gsp算法进行了并行化,利用spark云计算平台的大规模并行计算能力提高了海量数据序列模式挖掘效率。本发明的技术方案具有简单、快速的特点,能够较好地提高序列模式挖掘的效率。附图说明图1为本发明实施例的流程图;图2为本发明实施例的序列数据库切分示意图;图3为本发明实施例的序列数据库切分结果示意图;图4为本发明实施例的数据库准备执行过程的示意图;图5为本发明实施例的数据库挖掘第一个maprduce任务执行过程的示意图;图6为本发明实施例的数据库挖掘第二个maprduce任务执行过程的示意图。具体实施方式为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。本发明设计的基于spark平台的序列模式挖掘算法的流程见附图1,所有步骤可由本领域技术人员采用计算机软件技术实现流程自动运行。实施例具体实现过程如下:步骤1,数据库切分;将序列数据库切分成相同大小的数据库分片(分片数根据集群中的工作节点数来确定),使每个数据库分片中的序列总长度近乎相等。请见图2,序列数据库切分的具体步骤如下:(1)数据库中所有的序列以序列长度降序形式排序。(2)最前面的n个序列组成了初始的n个数据库分片,每个数据库分片包含一条序列模式。每个数据库分片的总序列长度初始化为其包含的这一条序列的长度。(3)基于n个数据库分片的总序列长度构建一个最小堆ψ={d1,d2,d3,…,dn},其中d1为最小堆根节点,是被分配了最短的序列的序列数据库分片。(4)获取最小堆根节点di,将在未被分配的序列中序列长度最大的序列加入di,调整最小堆。(5)重复步骤(4),直至所有的序列都被分配到序列数据库片段中。如图3,本实施例设定将原始序列数据库划分为n=3个子序列数据库。原始序列数据库内容如下表1:表1序列号序列s1<(ab)ac>s2<(cd)(efg)>s3<h>s4<cg>s5<ga>s6<acgh>首先将数据库进行排序得到排序后的数据库:s2s1s6s4s5s3。取前面的三条序列建立初始堆结构,调整建立初始堆。此时三个子序列数据库及其包含的序列为:子数据库p1:s2,长度为5;子数据库p2:s1,长度为4;子数据库p3:s6,长度为4。其中最小堆根节点为p2。然后依次读取排序后的序列数据库。首先读取序列s4,加入p2,此时p3长度为6。调整最小堆,此时最小堆根节点为p3。读取序列s5,加入p3,此时p3长度为6。调整最小堆,此时最小堆根节点为p1。读取序列s3,加入p1,此时p1长度为6。至此序列读取完毕,数据库切分步结束。实施例中切分结果保证了每个序列数据库分片中的序列总长度相同。划分得到的子序列数据库1、2、3分别如下表2、3、4:表2序列号序列s2<(cd)(efg)>s3<h>表3序列号序列s1<(ab)ac>s4<cg>表4序列号序列s6<acgh>s5<ga>若spark平台中map节点的个数为q,建议子序列数据库的个数等于map节点的个数,即n=q。若n<q,在运行该方法时,在没有任务失败的情况下有(q-n)个map节点得不到利用,节点利用率不高。若n>q,在运行该方法时,在没有任务失败的情况下n-q个子路径序列数据库需要在q个map节点处理完前q个子路径序列数据库后才会得到处理,处理效率不高。因此n=q能够同时满足节点利用率和处理效率。步骤2,数据库准备;在这一步中,利用一个mapreduce任务产生所有的1-序列模式。该步首先调用第一个flatmap函数从序列数据库片段中读取每条序列,其中序列以<longwritableoffset,textsequence>键值对的形式存储。随后调用另一个flatmap函数将序列切分为项,产生<项,1>键值对。拥有相同键的键值对被合并传递给reduce节点,reduce节点调用reducebykey()函数计算<项,1>键值对的支持度,输出支持度大于等于设定的最小支持度的键值对。这些键值对的键即为1-序列模式,值即为该1-序列模式的支持度计数。实施例设定最小支持度为2,准备步的具体执行过程参见图4,map节点对数据库分片1产生键值对结果如下表5:表5输出结果<c,1><d,1><e,1><f,1><g,1><h,1>map节点对数据库分片2产生键值对结果如下表6:表6输出结果<a,1><b,1><a,1><c,1><c,1><h,1>map节点对数据库分片3产生键值对结果如下表7:表7输出结果<a,1><c,1><g,1><h,1><g,1><a,1>reduce节点合并具有相同的键的键值对,输出支持度大于等于2的键值对的结果如下表8:表8序列模式支持度a3c4g4h2步骤3,数据库挖掘;这一步迭代的利用mapreduce任务发现所有k-序列模式(k>1)。在准备步中产生的1-序列模式存入rdd中而不是hdfs中,以减小io开销。在第k个mapreduce任务中,每一个map节点首先从rdd中读取(k-1)-序列模式,通过候选序列模式产生步来产生候选的k-序列模式(ck)。然后调用一个map函数读取数据库片段中每条序列s,并判断候选的k-序列模式c是否是该序列的子序列,如果是子序列则产生<c,1>键值对。拥有相同键的键值对被合并传递给reduce节点。最后,每一个reduce节点调用reducebykey()函数计算<c,1>键值对的支持度,输出支持度大于等于设定的最小支持度的键值对,即为最后的k-序列模式(lk)。本实施例设定最小支持度为2,挖掘步中的第1个mapreduce任务具体执行过程参见图5,map节点1对数据库分片1产生键值对结果如下表9:表9输出结果<cg,1>map节点2对数据库分片2产生键值对结果如下表10:表10输出结果<ac,1><cg,1>map节点3对数据库分片3产生键值对结果如下表11:表11输出结果<ac,1><ag,1><ah,1><cg,1><ch,1><gh,1><ga,1>reduce节点合并所有的map节点产生的键值对,输出支持度大于等于设定的最小支持度的键值对如下表12:表12挖掘步中的第2个mapreduce任务具体执行过程参见图6,由于每个map节点从rdd中读取2-序列模式,通过候选序列模式产生步,没有候选的3-序列模式生成,因此map节点1对数据库分片1、map节点2对数据库分片2、map节点3对数据库分片3均没有输出键值对,reduce节点合并所有的map节点产生的键值对,发现所有的map节点没有输出,因此程序终止。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属
技术领域
:的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1