计算机研究与发展JournalofComputerResearchandDevelopmentDOI:10.7544/issnlooO一1239.2015.2014022952(2):282—294,2015分布式大数据函数依赖发现李卫榜李战?怀陈群姜西安涛刘海龙710072)潘巍(西北工业大学计算机科学学院(wbli2003@163.com)FunctionalDependenciesDiscoVeringinDistributedBigDataLiWeibang,LiZhanhuai,ChenQun,JiangTao,LiuHailong,andPanNorf^叫es£Pr扎PoZy£ec矗nic口ZWei(CoZZ已班o,Com户群蛔,Sc妇nce,Abstr眦tDiscoveringUhi口8r5i缈,Xi’Ⅻ710072)(FDs)fromrelationaldatabasesisanfunctionaldependenciesaimportantdatabaseanalysistechnique,whichhassemanticsanalysis,discoveryalgorithmssizeonly.widerangeofapplicationsinknowledgediscoVery,databaseExistingfunctionalsuitabletodataqualityassessmentanddatabasedesign.aredependenciesofsmandatamainlyappliedincentralizeddata,andisfarmorechallengingIntoarethecaseHowever,especiallyitdiscoverfunctionalweproposeexecutesetadependenciesindistributeddependenciesdatabases,withbigdata.thispaper,novelfunctionaldiscoveringapproachindistributedbigdata.FirstlywefunctionaldependenciesdiscoVeringontoalgorithminparallelineachnode,thenprunethecandidatetheresultsofdiscovery.Secondlywegroupthecandidatesetoffunctionaldependenciesbasedoffunctionaldependenciesaccordingexecutethefeaturesofcandidatefunctionaldependencies’1efthandside,anddiscoveryalgorithmbasedeventuany.shipmentonfunctionaldependenciesdependencyeachcandidatesetinparallel,andgetaUthefunctionaltoWeandanalyzethenumberofcandidatefunctionswithregardloadbalancearedifferentgroups,anddatafunctionaldependencies.discoveringtakendatasetsintoaccountwhenthatdiscoveringcomparedExperimentsonreal—worldbigdemonstratewithpreViousmethods,ourapproachismoreeffectiveinefficiency.Keywordsdiscoveringfunctionaldependencies;functionaldependencies;bigdata;knowledgediscovery;parallelcomputing摘要在关系数据库中,函数依赖发现是一种十分重要的数据库分析技术,在知识发现、数据库语义分析、数据质量评估以及数据库设计等领域有着广泛的应用.现有的函数依赖发现算法主要针对集中式数据,通常仅适用于数据规模比较小的情况.在大数据背景下,分布式环境函数依赖发现更富有挑战性.提出了一种分布式环境下大数据的函数依赖发现算法,其基本思想是首先在各个节点利用本地数据并行进行函数依赖发现,基于以上发现的结果对函数依赖候选集进行剪枝,然后进一步利用函数依赖的左部(1efthandside,LHS)的特征,对函数依赖候选集进行分组,针对每一组候选函数依赖并行执行分布式环境发现算法,最终得到所有函数依赖.对不同分组情况下所能检测的候选函数依赖数量进行了分析,在算法的执行过程中,综合考虑了数据迁移量和负载均衡的问题.在真实的大数据集上的实验表明,提出的检测算法在检测效率方面与已有方法相比有明显的提升.关键词函数依赖发现;函数依赖;大数据;知识发现;并行计算中图法分类号TP311.13收稿日期:2014—11一06;修回日期:2014—12一08基金项目:国家“九七三”重点基础研究发展计划基金项目(2012cB316203);国家自然科学基金项目(61472321,61033007);国家“八六三”高技术研究发展计划基金项目(2012AA011004);西北工业大学基础研究基金项目(3102014JSJo005,3102014JSJ0013)万方数据李卫榜等:分布式大数据函数依赖发现规则发现是数据挖掘中的一项重要任务.关系数据库中,函数依赖发现在知识发现、数据库语义分析、数据质量评估以及数据库设计等领域有着广泛的应用.大数据背景下数据有着4V特征,即数据量巨大(v01ume)、数据类型繁多(variety)、数据更新速度快(velocity)和价值密度低(value)等特点[1。2].这些特点使得传统的函数依赖发现算法很难适合大数据环境.函数依赖(functionaldependency,FD)是关系数据库中两个属性集合的属性值之间的约束关系表示.例如学生信息表中,学号可以决定学生姓名,这里:“学号决定学生姓名”就是一个函数依赖.通常情况下,关系数据库R上的实例,一的函数依赖可以表示成形如:X—y的形式,其中X,yEu,U为r的属性集合.函数依赖x—y成立的条件为:对所有的元组对≠。,£,∈r(U),如果满足f。[X]一£i[X],则必有£i[y]一£,[y].从数据中发现函数依赖有着十分重要的意义.例如,从一个包含化合物信息的数据库中发现某些化合物函数依赖于特定的结构属性,则对于化工合成来说,有着十分重要的应用价值[3].由于函数依赖有着重要的应用价值,很多学者对集中式环境下关系数据中发现函数依赖的问题进行了相关研究,并提出了多种函数依赖发现算法[3。11I.现有的函数依赖发现算法主要针对小规模、集中式分布的数据,不适合分布式环境和大数据的情况.在分布式环境下数据分布在不同的节点,节点间通过网络进行连接.由于每个节点仅包含部分数据,在单个节点执行传统的函数依赖发现算法所得到的函数依赖仅满足局部数据,未必满足整体数据.例1.图1是一个分布式数据库的示例:谢ZBC1口l61C12d16lC2l耐0口C3口262Cl4口162C24口l62C25口261Cl5口261C16d26lC26口26lC2(砷n,dlstnbutedatJl(b)咆,dIstnbutedat眈(c,,l+,2Fig.1Adistributeddatabase.图1一个分布式数据库在该分布式数据库中,原始数据如图1(c)所示,原始数据分别分布在s。和sz两个节点上,如图1(a)(b)所示.数据库实例r。和r。均包含4个属性,分别为id,A,B,C.从图1不难看出,对r,来说,任意元组对£;和≠i,如果满足£,[A]一≠,[A],则必定存万方数据在£,[B]一巧[B].如对£,[A]一£:[A]=口,,存在£,[B]一£。[B]一6。,反之亦然,根据函数依赖的定义,r,上存在函数依赖A—B,B—A.同理,r。上同样存在函数依赖A—B,B—A.说明函数依赖A—B,B—A在分布式环境的局部数据上成立,但是对于全局数据,如图1(c)所示,存在£,[A]一£。[A]一口。,但是£,[B]=易。,f。[B]=6:,≠。[B]≠屯[B],因此函数依赖A—B在全局数据上不成立.由此可见,分布式环境下,在各个分布式节点上成立的函数依赖在集中式环境下未必成立,因此现有的集中式环境下的函数依赖发现算法对分布式环境并不适用.从本例不难看出,分布式环境下进行函数依赖发现需要进行数据迁移,无法直接使用现有的函数依赖发现算法.关于函数依赖发现的现有研究比较多,主要针对集中式环境下函数依赖的发现,其中比较典型的有TANE[3],FUN[41和Fastfds[53等.分布式环境下,数据分布在不同的节点,上述的函数依赖发现算法无法直接使用.此外,由于已有的算法复杂度与数据规模呈指数级关联,因此在大数据背景下现有的检测算法效率比较低.本文研究了分布式环境下大数据函数依赖发现的相关问题,提出了一种分布式环境下大数据的函数依赖发现算法,其基本思想是首先在各个节点利用本地数据并行执行函数依赖发现算法,基于以上发现的结果对函数依赖候选集进行剪枝,然后进一步利用函数依赖的左部(1efthandside,LHs)的特征,对函数依赖候选集进行分组,针对每一组候选函数依赖并行执行分布式环境发现算法,最终得到所有函数依赖.在算法的执行过程中,综合考虑了数据迁移量和负载均衡的问题.通过对数据迁移量和负载均衡的权衡和折衷,可以在尽量减少数据迁移量的基础上,有效提高算法的函数依赖发现效率.本文的主要工作及贡献如下:1)给出了适合分布式环境的候选函数依赖搜索策略和函数依赖发现的剪枝策略,分析并论证了候选函数依赖剪枝的特点;2)研究了分布式环境下函数依赖发现,分别给出了集中式发现算法和并行发现算法;3)分析了基于散列进行数据重分布及并行函数依赖发现的问题,给出了候选函数依赖的分组策略;4)基于真实数据集和人工数据集通过实验验证了本文提出的分布式环境下函数依赖发现算法,并进行了对比分析.284本文使用真实及人工大数据集基于HadOop和Hama平台对提出的分布式环境函数依赖发现方法进行了实验验证.实验结果表明,本文的方法在数据规模和分片数量方面扩展性良好,在减少响应时间方面效果明显.1相关工作1.1函数依赖发现现有的函数依赖发现算法主要是针对集中式环境进行函数依赖发现,根据发现方法的不同总体上来说可以分成两种:自顶向下的发现算法和自底向上的发现算法[6].这两种方法的不同之处在于:自顶向下的发现算法从函数依赖的最短的左端到最长的左端,逐层生成候选函数依赖,然后对生成的候选函数依赖进行验证,从中发现函数依赖;自底向上的发现算法与之不同,先通过元组的比较得到一致集合(agree—sets)或差异集合(difference—sets),然后生成候选函数依赖,最后在一致集合和差异集合上验证生成的候选函数依赖是否满足.自顶向下的函数依赖发现算法中,以研州E[3],FUNL4]和FI)_Mine[73等为代表.TANE方法和FUN方法根据元组的属性值将元组划分成不同的集合,然后在不同的划分上对候选函数依赖进行检测.通过逐层发现的方法,在每一层对候选函数依赖进行验证,生成符合条件的函数依赖,然后根据发现的结果生成下一层的候选函数依赖.TANE方法和FUN方法的主要区别在于剪枝策略的不同.FD—Mine方法考虑函数依赖Armstrong公理系统得到候选函数依赖剪枝策略,在逐层发现过程中对候选函数依赖进行剪枝.与自顶向下的方法不同,自底向上的函数依赖发现算法不对候选函数依赖在整个数据库元组上进行验证,而是基于元组间比较得到一致集合和差异集合,对生成的候选函数依赖进行验证.比较典型的方法有FastFDs[51和Dep—Miner[8]等.FastFDs和Dep—Miner首先从初始数据库中得到一个划分,根据该划分计算出一致集合和差异集合,根据得到的一致集合和差异集合可以发现最小的函数依赖覆盖.FastFDs和Dep—Miner的主要区别在于Dep—Miner使用了一种逐层搜索的方法,而FastFDs方法采用的是一种深度优先的搜索策略.文献[12]研究了分布式数据库函数依赖挖掘方法,给出了一个分布式数据库函数依赖挖掘框架,首万方数据计算机研究与发展2015,52(2)先在各个节点进行函数依赖发现,然后根据发现的结果对候选函数依赖集合进行剪枝,最后将各个节点的数据集中到一个中心节点,在中心节点执行集中式环境下的函数依赖挖掘算法.该方法可以实现分布式数据库的函数依赖挖掘,但是由于主要的挖掘执行过程还是在集中式环境进行,因此方法的效率比较低,而且不适合规模较大的数据.1.2条件函数依赖发现条件函数依赖(cor湎tiomlfunctionaldependencies,CFDs)是对传统函数依赖的扩展,主要用于数据清洗、数据质量等方面.文献[13—16]对条件函数依赖发现的相关问题进行了研究,其中文献[13—15]主要研究了关系数据上条件函数依赖的发现.文献[16]研究了半结构化数据XML上条件函数依赖的发现.wenfei等人口胡研究了集中式环境下条件函数依赖的发现问题,提出了3种发现条件函数依赖的方法:第1种方法称为CFDMiner,基于挖掘闭包项集的方法用于发现常量函数依赖;另外两种方法用于发现普通条件函数依赖.其中一种方法是对TANE[3]方法的扩展,称为CTANE,逐层发现条件函数依赖;另外一种方法FastCFD在数据集规模比较大时比CTANE更加高效.2预备知识本节主要介绍函数依赖、元组等价类的划分等内容.2.1函数依赖函数依赖可以看作是定义在关系上的完整性约束.假定R是一个关系模式,在其上定义了一个函数依赖集合,A≠frs(R)一{A,,A。,…,A。}定义了R上的属性集合,R上的每一个属性A∈A££”(R)的域用Dom(A)表示.R的一个实例工是一个元组的集合,其中每一个元组属于Dom(A,)×…×Dom(A。).这里用炬A]表示元组£的属性A的值,用£[L]表示A≠£,.s(R)中一组属性L在£上的投影.定义l[17|.一个函数依赖(简称FD)是定义在关系R上的形如X—y的表达式,这里X,y是A≠£rs(R)上的属性集合.函数依赖X—y在关系R上成立,当且仅当:对R的每一个实例,如果R中的任意两个元组有着相同的X属性值,则必然有着相同的y属性值.在函数依赖X—y中,X决定y.函数依赖X—y是平凡的,如果y是X的一个子集.平凡函数依赖对所有的关系实例都成立.如果李卫榜等:分布式大数据函数依赖发现函数依赖满足ynX一⑦,则这个函数依赖是非平凡的.对于函数依赖P:X—y,x是函数依赖9的左部(LHS),而y是9的右部(righthandside,RHS).由于平凡函数依赖对所有关系实例都成立,这里所要发现的函数依赖为非平凡函数依赖.给定关系R的实例D,D水平切分为(D,,…,D。),假定D的每一个切分分布在一个单独的节点上,对于i∈[1,押],D;分布在节点S。上.假定三为关系R的候选函数依赖的集合,为发现关系R上的函数依赖,需要对三中的每一个候选函数依赖进行验证,即对于任一函数依赖9∈三,验证9在R上是否满足,即验证R上是否存在违反函数依赖妒的元组,记为Ⅵo£Ⅱ(妒,D),如果1Ⅵo£Ⅱ(妒,D)I>O,说明存在违反妒的元组,9不是R上的函数依赖.2.2划分关系r上的任意两个元组f。和≠:在属性集合X∈R上是等价的,如果对任一属性A∈X,满足条件£。[A]一£。[A].定义2.关系r在属性集合X上所有等价的元组组成的一个集合称为r在x上的一个等价类[3].在例1中,,一。在属性A上的一个等价类为{1,2),这里用元组的id表示一个元组.定义3.关系r上基于属性集X将r中所有元组分成不同的等价类,称为,一在X上的一个划分,用瓜表示关系r在属性集X上的一个划分[3].以例1中n+r。为例,基于属性集合{A),可以将r,+r:划分成等价类Ⅱ{A)一{{1,2,4),{3,5,6}).同理,分别基于属性集合{B}和{C),可以将r。+r。划分成等价类Ⅱ{。}一{{1,2,5,6),{3,4))和Ⅱ{c}一{{1,3,5),{2,4,6)).这里用lⅡxI表示划分Ⅱx中等价类的个数.引理1[3].函数依赖X—A成立,当且仅当满足条件Iml—lⅡxLJAI.3候选函数依赖搜索和剪枝3.1搜索策略前面提到,由于平凡函数依赖在任何情况下都成立,这里只需要搜索非平凡函数依赖.给定关系r的属性集合X,在进行候选函数依赖搜索时,对所有形式如X\{A)一X进行搜索,这保证了搜索的所有候选函数依赖为非平凡的函数依赖.候选函数依赖的搜索本文采用逐层搜索的方法,如图2所示.在具万方数据体搜索过程中,本文采用候选函数依赖的LHS部分包含属性个数由多到少的方向进行搜索,这种搜索的一个好处是便于进行候选函数依赖的剪枝.假定关系r包含咒个属性,则在逐层搜索时,首先从第1层开始,搜索LHS部分包含(咒一1)个属性的候选函数依赖,即(咒一1)一attr候选函数依赖.然后进入第2层,搜索(狎一2)一attr候选函数依赖,以此类推,直到搜索完第咒一1层,得到所有1一attr的候选函数依赖为止.LevellABCABDACDBCDBCBDCD3ABCD4F‘lg.2CandldateF、Dscomblnatlonswithattributesset{A,B,C,D).图2属性集为{A,B,C,D)时候选函数依赖组合在图2中,关系r包含4个属性,分别为A,B,C和D.在进行函数依赖搜索时,从第1层开始,首先搜索在LHS部分包含3个属性的候选函数依赖,共有4个,分别为ABC—D,ABD—C,ACD—B,以及BCD—A.第1层搜索完毕转入第2层,该层包含的候选函数依赖有12个,分别为AB—C,AB—D,AC—,B,AC—,D,AD—,B,AD—,C,BC—,A,BC—,D,BD—A,BD—C,CD—A,CD—B.然后转入第3层,搜索1一attr的候选函数依赖,共有12个,分别为A—B,A—C,A—D,B—A,B—C,B—D,C—A,C—B,C?D,D—A,D—B,D—C.至此,所有非平凡函数依赖都搜寻完毕.3.2剪枝策略为提高函数依赖发现的效率,考虑对候选函数依赖集进行剪枝.在3.1节中给出了候选函数依赖的搜索策略,从LHS部分包含最多属性的候选函数依赖开始,逐层向下进行搜索.在搜索过程中,如果出现候选函数依赖不成立的情况,则可以对与之相关的LHS部分包含较少属性的候选函数依赖进行剪枝.引理2.如果候选函数依赖X—A不成立,即X≯A,则必然有y书A,其中y[X.证明.假定函数依赖y—A成立,其中y[X,则根据阿姆斯特朗公理系统的自反律:若y∈X,则X—Y成立.由于ycX,故X—y成立.根据阿姆斯特朗公理系统的传递律:若x—y,y—Z,则X—,y.这里X—y,而又假定函数依赖y—A成立,故函数依赖X—A成立.这与已知函数依赖X—A不成立相互矛盾.故假定函数依赖y—A不成立,即y扣4.证毕.前面提到,在进行候选函数依赖搜索时,从LHs部分包含最多属性的候选函数依赖开始,向下逐层进行.对每一个搜索到的候选函数依赖进行验证,如果遇到非函数依赖的情况,则对LHS部分为当前候选函数依赖LHs部分真子集的候选函数依赖进行剪枝.图3是对候选函数依赖进行剪枝的一个示例:Level12BCBDCD3爿BCD4Fig.3PruningofcandidateFDscombinations’searchspace.图3候选函数依赖搜索空间剪枝在图3中,假定经过验证候选函数依赖ABC—D不成立,则根据引理2,LHS部分为{A,B,C)真子集,且RHS部分为{D)的所有候选函数依赖都不成立,因此可以对候选函数依赖搜索空间进行剪枝,可剪枝的候选函数依赖包括:AB—D,AC—D,BC—D,A—D,B—D,C—D,即图3中加粗的连线部分所表示的候选函数依赖,这样可以大大减少搜索空间及有效提高函数依赖发现的效率.对于包含挖个属性的关系r,其上面的LHS部分包含最多属性个数的候选函数依赖为(卵一1)一attr候选函数依赖.引理3.任一(咒一1)一attr候选函数依赖p不成立,则可以对包含2”1—2个候选函数依赖的集合①中所有候选函数依赖进行剪枝,其中:Vp7∈①,满足LHS(∞7)cLHS(∞).证明.由于可剪枝的候选函数依赖的LHS部万方数据计算机研究与发展2015,52(2)分为(咒一1)一attr候选函数依赖的LHS部分的真子集,因此可剪枝的候选函数依赖LHS部分包含属性个数最多为咒一2个,最少为1个.LHS部分属性个数为挖一2的候选函数依赖个数为C:二j个,LHS部分属性个数为咒一3的候选函数依赖个数为C:二{个,…,LHS部分属性个数为1的候选函数依赖个数为C:一,个,因此总的可剪枝候选函数依赖个数为CL。+C0。+C0。+…+C篇一C譬。+C■。+C0。+C■,+…+C:二{+C:二{一C:一1一C:二{一2”1—1—1—2”1—2.证毕.从引理3不难看出,如果(行一1)一attr候选函数依赖不成立,则可以被剪枝的候选函数依赖与关系r中包含属性的个数咒呈指数级增长,关系r中包含属性的个数越多,可以被剪枝的候选函数依赖也越多,这样可以大大缩减发现候选函数的搜索空间.4水平切分的分布式大数据函数依赖发现与集中式相比,在分布式环境下进行函数依赖发现更具有挑战性,而且通常需要进行节点间的数据迁移.在进行函数依赖发现时,对于每一个候选函数依赖,需要确定哪些元组需要迁移以及迁移到哪个节点,对于单个函数依赖来说,该问题已经是非平凡的口8|,根据前面的介绍,找出一个具有最小通信代价的函数依赖发现算法是NP一难的.这里给出了分布式环境下大数据函数依赖发现的有效方法:1)通过利用候选函数依赖的结构特征对候选函数依赖进行分组,组内的候选函数依赖可以通过一次数据重分配进行平行发现;2)利用各个节点并行发现函数依赖,有效提高函数依赖的发现效率,大大减少函数依赖发现所耗费的时间.4.1集中式发现算法首先给出分布式环境下水平切分的大数据函数依赖的集中式发现算法.算法FDC盯一DiscouPr是一个基本方法,该算法将分布式大数据函数依赖发现问题转化为集中式数据函数依赖发现问题.首先统计各个节点的元组个数,然后选择一个节点作为函数依赖发现的执行节点,其余节点将本节点的所有元组数据发送到执行节点,然后在执行节点执行集中式函数依赖发现算法.算法执行过程中,首先选择一个节点S,作为函数依赖发现的执行节点,别的节点上的元组都迁移到节点Sj,最后函数依赖发现可
分布式大数据函数依赖发现
2019-02-14 23:52
分布式大数据函数依赖发现.doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!