CN108388603A - 基于Spark框架的分布式概要数据结构的构建方法及查询方法 - Google Patents
基于Spark框架的分布式概要数据结构的构建方法及查询方法 Download PDFInfo
- Publication number
- CN108388603A CN108388603A CN201810113980.4A CN201810113980A CN108388603A CN 108388603 A CN108388603 A CN 108388603A CN 201810113980 A CN201810113980 A CN 201810113980A CN 108388603 A CN108388603 A CN 108388603A
- Authority
- CN
- China
- Prior art keywords
- node
- bloomfilter
- digest
- structures
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000010276 construction Methods 0.000 title claims abstract description 19
- 238000012545 processing Methods 0.000 claims abstract description 13
- 238000003860 storage Methods 0.000 claims description 12
- 238000012360 testing method Methods 0.000 claims description 8
- 238000003491 array Methods 0.000 claims description 5
- 230000006835 compression Effects 0.000 claims description 5
- 238000007906 compression Methods 0.000 claims description 5
- 239000000284 extract Substances 0.000 claims description 3
- 238000005070 sampling Methods 0.000 claims description 3
- 238000005056 compaction Methods 0.000 claims description 2
- 238000004590 computer program Methods 0.000 claims description 2
- 235000013399 edible fruits Nutrition 0.000 claims 1
- 238000004364 calculation method Methods 0.000 abstract description 7
- 238000009826 distribution Methods 0.000 abstract description 5
- 238000004422 calculation algorithm Methods 0.000 description 24
- 238000005516 engineering process Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000005192 partition Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 150000001875 compounds Chemical class 0.000 description 5
- CZRCFAOMWRAFIC-UHFFFAOYSA-N 5-(tetradecyloxy)-2-furoic acid Chemical compound CCCCCCCCCCCCCCOC1=CC=C(C(O)=O)O1 CZRCFAOMWRAFIC-UHFFFAOYSA-N 0.000 description 4
- 230000008520 organization Effects 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 241000544061 Cuculus canorus Species 0.000 description 1
- 241000282326 Felis catus Species 0.000 description 1
- 241000545442 Radix Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000000205 computational method Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000010339 dilation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012966 insertion method Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于Spark框架的分布式概要数据结构的构建方法及查询方法,以Spark平台为基础,利用q‑digest结构获得数据区间分布情况,BloomFilter获取组员存在信息,HyperLogLogPlus记录数据基数信息,实现高吞吐低延迟的处理能力,且能够快速响应查询要求,有效适应Spark分布式计算环境,返回误差可控的近似计算结果。本发明还提供一种基于Spark框架的分布式概要数据结构的构建及查询系统。
Description
技术领域
本发明属于信息技术领域,具体涉及一种基于Spark框架的分布式概要数据结构的构建方法及查询方法。
背景技术
近年来,随着互联网、物联网、智能终端设备的普及与应用,数据产生的速度越来越快,体量也越来越大,如何对快速产生的大流数据(heavy-hitter)进行快速的查询与处理成为目前业界关注的核心焦点问题。分位数组员关系查询,作为传统数据预处理与数据挖掘系统最常见的操作之一,用处十分广泛。例如,每年天猫“双十一”后都会公布店铺销售业绩,考试后学校会公布所有学生的成绩排名,分位数组员关系查询可根据分位数信息查询店铺业绩、学生成绩排名是否是前10%、10%~20%等。
下面以实例说明具有分位数过滤条件的组员关系查询:设输入的数据元素为<key,value>结构,其中key是元素的表示符号,value是元素的数据值。给定输入的元素数列D=<key1,1>、<key2,8>、<key3,2>、<key4,4>、<key5,12>、<key6,11>、<key7,9>、<key8,13>、<key9,7>、<key10,5>、<key11,6>、<key12,3>、<key13,10>、<key14,14>、<key15,15>。经过排序输出后的序列D’=<key1,1>、<key2,2>、<key3,3>、<key4,4>、<key13,5>、<key6,6>、<key7,7>、<key9,8>、<key10,9>、<key5,10>、<key8,11>、<key11,12>、<key12,13>、<key14,14>、<key15,15>。
(1)区间组员查询:
输入 | 待查询元素key值、分位数区间(q1,q2)(0<q1<q2<1) |
输出 | True or False |
示例 | 在分位数区间(0.1,0.2)查询key8是否存在,输出False |
(2)给定分位点至上界的区间范围内组员查询:
输入 | 待查询元素key值、给定分位点q(0<q<1) |
输出 | True or False |
示例 | 给定分位点0.9,查询key15是否存在于查询区间(0.9,1),输出True |
对大规模数据进行复杂组员查询处理,需要消耗巨大的计算机资源和时间,然而在实际应用中,多数情况下只需掌握占据大部分流量的heavy-hitter(大流)即可满足需要。因此,利用有限的资源关注heavy-hitter就成为了一个较好的选择。heavy-hitter是发送数据量在网络总数据量中占据很大比例,或者带宽资源占用率较大的流,检测到的heavy-hitter长度超过阈值,阈值的给定会根据不同的应用做出相应的调整。针对heavy-hitter的特性,利用近似组员查询(Approximate Membership Query)技术实现组员关系查询。AMQ技术提供了一种在可接受的精度和可控的内存资源的条件下完成查询的方法。这种技术通常能够以一种远小于数据规模的概要数据结构,有效地处理高速到达的大规模流数据集合。该方法结合q-digest、BloomFilter、HyperLogLogPlus等概要数据结构,实现流式大数据环境下具有复杂过滤条件的快速组员查询。
在组员关系查询中,BloomFilter是一种典型的近似组员查询AMQ(ApproximateMembership Query)数据结构。BloomFilter在允许有一定误差(false-positive error)的条件下利用位数组以较高的空间、时间效率很简洁地表示一个或多个数据集合,并能够判断一个元素是否属于这个集合。BloomFilter的核心思想是通过多个独立的hash函数将集合中元素映射到一个位数组里,存储数据元素所需的存储空间仅与元素所映射到位数组的长度有关。BloomFilter的结构致使它存在一定的假阳性错误,即不属于集合中的元素误判为存在于集合中。由于BloomFilter利用位数组的结构占用空间非常的小,并且可以很好地保证误差,因此BloomFilter在允许一定误差的大数据环境下应用十分广泛。
DynamicBloomFilter是一种针对BloomFilter扩展性问题而提出的改进算法,DynamicBloomFilter的核心思想是通过将BloomFilter中的位数组转换为多个位数组组成的矩阵来解决BloomFilter的可扩展性。在大数据环境下,随着集合元素的不断增加,BloomFilter中的位数组存储的元素可能会达到阈值甚至大幅度的超限,因此可能会有很高的误报率,DynamicBloomFilter可以动态地扩张以便更有效地处理动态数据集。近年来基于AMQ技术的组员关系计算方法主要有:BloomFilter算法(B.H.Bloom.Space/timetrade-offs in hash coding with allowable errors.Communications of the ACM,13(7),1970)、Quotient Filter算法(M.A.Bender,M.Farach-Colton,R.Johnson,R.Kaner,B.C.Kuszmaul,D.Medjedovic,P.Montes,P.Shetty,R.P.Spillane,and E.Zadok.Don’tthrash:How to cache your hash on flash.Proceedings of the VLDB Endowment,2012.)、Cuckoo Filter算法(B.Fan,D.G.Andersen,M.Kaminsky,andM.D.Mitzenmacher.Cuckoo filter:Practically better than Bloom.In Proceedingsof the 10th ACM International on Conference on Emerging NetworkingExperiments and Technologies,pages 75–88,2014)和概要数据技术(G.Cormode andS.Muthukrishnan.An improved data stream summary:The count-min sketch and itsapplications.Journal of Algorithms,2005.)。
在近似分位数计算的研究中,典型的研究成果如Greenwald与Khanna提出的一种确定的单遍扫描算法-GK算法(M.Greenwald and S.Khanna.Space-efficient onlinecomputation of quantile summaries.In ACM SIGMOD,2001.),能够利用等宽直方图有效地计算数据集的分位数。由Shrivasrava等人提出的另一种近似查询算法q-digest(N.Shrivastava,C.Buragohain,D.Agrawal,and S.Suri.Medians and beyond:Newaggregation techniques for sensor networks.In ACM SenSys,2004.),能近似地捕获数据分布特征,取代具体的每个节点采集的数据,因此不必对所有到达的数据进行存储和排序,故适用于流式大数据环境下的近似查询。q-digest算法的核心思想是根据数据的分布,对数值进行自动分组并将其放到可变大小的具有相似权重的节点中。q-digest能够支持一些较为复杂的操作,如查询中点、位数查询、反转分位数查询、范围查询频繁项查询、及协调控制查询等。
HyperLogLogPlus(S.Heule,M.Nunkesser,and A.Hall,“HyperLogLog inpractice:algorithmic engineering of a state of the art cardinality estimationalgorithm,”in Proc.16th Int.Conf.Extending Database Technol.,2013,pp.683–692.)是一类利用hash值估算数据基数的概要数据结构。HyperLogLogPlus算法是通过改进HyperLogLog(Flajolet,Philippe,et al."Hyperloglog:the analysis of a near-optimal cardinality estimation algorithm."AofA:Analysis ofAlgorithms.Discrete Mathematics and Theoretical Computer Science,2007.)所实现的,HyperLogLogPlus算法以64位的hash函数替代HyperLogLog算法32位的hash函数,能够应用于更大的数据规模并提高了在大数据应用环境下的估算精确度。HyperLogLogPlus的核心思想是放弃一定的准确性换取空间,在存储空间相同的条件下,HyperLogLogPlus能以标准差为2%、占用1.5k的内存的条件下估计基数超过109的数据集,估计值精度更高,因而得到了广泛的关注和使用。
发明内容
本发明的目的是提供一种基于Spark框架的分布式概要数据结构的构建方法及查询方法,以Spark平台为基础,利用q-digest结构(一种概要数据结构)获得数据区间分布情况,BloomFilter获取组员存在信息,HyperLogLogPlus记录数据基数信息,实现高吞吐低延迟的处理能力,且能够快速响应查询要求,有效适应Spark分布式计算环境,返回误差可控的近似计算结果。
为达到上述目的,本发明采用的技术方案如下:
一种基于Spark框架的分布式概要数据结构的构建方法,其步骤包括:
在基于Spark框架的分布式环境下,以<key,value>的形式接收流数据;
获取流数据的数据元素的value值,构建由二叉树可存储内容的节点组成的q-digest结构,将value值插入到q-digest结构相应的叶节点中;该q-digest结构的节点包括节点编号和节点内容,该节点内容包括节点计数器、BloomFilter和HyperLogLogPlus;
由下向上逐层检查各节点是否满足节点约束条件,如果满足,则通过HyperLogLogPlus判断当前BloomFilter是否超出最佳容量,否则向上合并至父节点;本发明所述的最佳容量定义为:Bloomfilter中bit数组的位由hash函数设置为1,未设置位为0,最佳容量一般是指工程实践中为1的个数占全部bit位的比率在50%-80%;
如果BloomFilter未超出最佳容量,则将数据元素的key插入到节点的BloomFilter,否则新建BloomFilter以插入数据元素的key;
将数据元素的key插入到HyperLogLogPlus中,完成分布式概要数据结构的动态构建。
进一步地,在插入value值前先判断当前二叉树是否需要扩容,如无法完全容纳value值,则对二叉树进行扩容或对二叉树各节点进行全局压缩。
进一步地,采用Dynamic BloomFilter方法新建BloomFilter。
进一步地,所述节点约束条件为:
其中节点v非叶节点;
其中节点v非根节点;
其中,vp是v的父节点,vs是v的兄弟节点,k是所述q-digest结构的压缩参数,n是所有节点value值的总和。
一种基于Spark框架的分布式概要数据结构的查询方法,其步骤包括:
对流数据的每个子流的q-digest结构(即分布式概要数据结构)进行二次采样,抽取顶层概要数据信息,构建全局q-digest结构;
在全局q-digest结构中生成value值查询范围,对满足该查询范围条件的分区进行查询;
聚合各分区查询结果;
将流数据的每个子流的q-digest结构进行合并,进行全局查询,获得在上述分区查询结果的误差范围内的近似查询结果。
进一步地,合并q-digest结构的方法步骤包括:
将各q-digest结构的对应层次的节点的计数器进行整数相加;
如果BloomFilter未超过最佳容量,则直接合并BloomFilter;
如果BloomFilter超过最佳容量,则将待合并的BloomFilter直接附加到节点的BloomFilter数组中,排序并将含有最小基数的BloomFilter排在最后;
合并HyperLogLogPlus,实现各q-digest结构的合并。
进一步地,根据HyperLogLogPlus所记录的基数值判断BloomFilter是否超过最佳容量。
进一步地,根据节点约束条件,调整全局q-digest结构。
进一步地,所述查询的方法步骤包括:
根据给定的分位数区间(q1,q2),找出q1、q2相对应的分位点,计算出value查询范围[value1,value2];
后序遍历q-digest结构中的节点,如果当前节点的value被包含在所述查询范围内,则获取该节点对应的BloomFilter;
如果有多个节点的value均被包含在所述查询范围内,则生成节点列表;
测试待查询数据元素的key是否存在于每个节点的BloomFilter中。
进一步地,所述q1、q2取值为0<q1<q2<1。
一种基于Spark框架的分布式概要数据结构的构建及查询系统,包括存储器和处理器,该储存器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述构建方法和查询方法的各步骤指令。
本发明提出一种基于Spark框架的分布式概要数据结果的构建方法,本方法在每个分区(子流)内独立抽取概要数据。在具体构建过程中,根据每个分区内数据实际分布情况,建立动态、可自动扩容的BloomFilter计数器。本方法首先通过使用HyperLogLogPlus快速判断当前BloomFilter内的基数范围,并采用Dynamic BloomFilter的方法对基数较大的分区进行自动扩容(即Bloomfilter的动态增长),保证在每个独立的分区内创建高精度的BloomFilter计数器。
本发明针对海量数据条件下的复杂组员关系查询,提出一种基于Spark框架的分布式概要数据结果的查询方法。本方法首先在每个独立的分布式概要数据中进行二次采样,抽取少量顶层概要数据信息,构建成全局q-digest结构。根据具体查询条件结合全局q-digest结构,下发查询命令到满足条件的分区内执行具体的查询。同时针对全局的查询,可以将多个q-digest结构进行二次合并操作,保证在原有误差范围内的近似查询结果。
本发明在近似分位数查询算法q-digest结构的基础上,结合BloomFilter与HyperLogLogPlus算法,利用Spark大数据处理平台的优势,实现了流式大数据环境下基于Spark的条件组员关系查询方法。针对于大数据环境下具有复杂过滤条件的组员快速查询统计的应用场景,本方法能够提供分布式处理且具有高吞吐低延迟的处理能力,并实现O(1)复杂度的近似查询。
与现有技术相比,本发明的有益效果如下:
1、在一种复合概要数据结构中实现多种具有复杂过滤条件的组员查询,包括区间组员查询、区间基数查询以及分位数查询。能够利用有限的空间快速返回误差可控的近似计算结果,算法具有良好的自适应性。
2、根据对流数据实时统计的结果,动态的扩展概要结构。本发明能够在保证不影响计算误差的条件下,通过自动创建新的复合概要结构处理数据量过大以至于不满足限定误差要求的情况。同时,通过利用HyperLogLogPlus基数估算值,动态扩展BloomFilter处理个别节点中数据严重倾斜的情况,提高数据处理效率。
3、充分利用Spark平台基于内存计算的优势,提出了具有低空间复杂度的组员关系查询算法,包括相对应的数据结构构建、合并方式。利用本方法对流数据进行查询,仅需较低的空间、时间即可得到较高的精确度的近似查询结果。
附图说明
图1是基本原理与数据结构示意图。
图2是基于HashMap的存储结构示意图。
图3是二叉树扩容过程示意图。
图4是一种基于Spark框架的分布式概要数据结构的构建方法流程图。
图5是多个q-digest结构合并流程图。
图6是查询流程示意图。
图7是在分布式环境中构建概要数据结构的示意图。
图8是分区数与Aggregate Time的关系图。
图9是分区数与Average Query Time的关系图。
图10是分区数与Error Rate的关系图。
图11是分布式结构对于单机的加速对比图。
图12是本算法与Spark SQL执行时间对比图。
图13是与SparkSQL和Hive的精确查询做误差结果偏移的对比图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本实施例提供一种基于Spark框架的分布式概要数据结构的构建方法,如图4所示,具体说明如下。
1、数据模型与结构
(1)数据结构设计
本方法基于q-digest结构实现,q-digest结构是一种能够在有限空间内为分位数计算提供一定误差保证的概要数据结构。q-digest结构的节点代表一个value的区间范围[v.min,v.max](v.min表示此节点对应的value最小值,v.max表示此节点对应的value最大值),例如图1中根节点对应的value区间为[1,8],叶节点分别对应value单值5和6。q-digest结构是完全二叉树中的一个有实际意义的子集,例如图1中实心节点包含在q-digest结构中,有实际存储的内容,节点旁的数字即为节点计数器的数值,空心节点是完全二叉树的一部分,但不属于q-digest结构,它只做逻辑表示,不进行实际存储。同时,q-digest结构可限定可利用的内存空间,给定压缩参数为k的q-digest结构所能拥有的最大节点数为3k。
本方法则是在q-digest结构的每一个节点中附加BloomFilter和HyperLogLogPlus,基本原理与数据结构示意如图1所示。
当数据流到达时,本方法以<key,value>的形式接收数据元素,按照元素的数据值value将数据元素插入到q-digest结构相应的叶节点,根据节点内的HyperLogLogPlus估计当前BloomFilter内的基数范围,并采用Dynamic BloomFilter的方法对基数较大的BloomFilter进行自动扩容;根据节点约束公式(1)(2)判定该节点是否需要维护。
设v是q-digest结构中的一个节点,count(v)是节点v的数值,vp是v的父节点,vs是v的兄弟节点。k是q-digest结构的压缩参数,n是所有节点value总和。v必须满足以下两个节点约束公式:
若v是叶节点,为保证此节点的数值大于时仍然属于q-digest结构,叶节点可作为公式(1)的例外;若v是根节点,则因根节点没有父节点和兄弟节点,所以根节点可作为公式(2)的例外。
(2)基于HashMap的动态树形结构维护技术
一般而言,深度为k的完全二叉树占用的空间最大为O(2k),由于q-digest结构是一种空间节约结构,在存储中可以只存储在合并后有实际内容的节点,一般情况下较为稀疏,因此算法中使用HashMap存储<节点编号,节点内容>来维护稀疏的完全二叉树。以图1中的树为例,将节点编号(节点上的数字即代表编号),根节点为1,其左子节点为2,右子节点为3,第k层的最左元素编号为2^k,节点旁边数字表示节点的计数值,则所需存储的节点只有5个,分别为1、4、5、12、13这五个节点,存储时以节点编号为key,节点计数器、BloomFilter、HyperLogLogPlus组成节点内容存储到HashMap中,存储结构如图2所示。同时因为插入数据的数值与二叉树节点有一定的对应关系,故可以不存储具体的value数值,只需维护节点之间的合并来达到最大节点数不超限即可。
本方法在接受数据项插入q-digest结构相应的叶节点时,检查当前完全二叉树T是否能容纳本条数据项,当插入的数值范围大于完全二叉树最底层数值容量时需要对T进行扩容。因其基于HashMap的存储结构,本方法在扩容时只需改变对应节点的节点编号,无需变动节点内容,因此能够高效地进行分区扩容,最大扩容为原来的2倍。
扩容时需要对完全二叉树所有节点重新编号,原来的树作为新树的左子树。例如从3层完全二叉树扩展为4层时的情况如图3所示,其中k为完全二叉树的深度,m为第k层从左往右的编号,2k+m节点映射为2(k+1)+m节点。从k层扩展为k+n(n>1)层时可以递推得2k+m节点映射为2(k+n)+m,节点编号增加量为2(k+1)·(2n-1)。
2、基于Spark框架的分布式概要数据结构的构建过程
在对流式大数据的查询处理中,通常面临内存不足、分布未知且数据无序、查询响应时间过长等问题,本方法针对以上问题,提出在Spark分布式计算框架中构建概要数据结构,能够在有限的空间中进行快速查询,并返回误差可控的近似计算结果。
本构建方法为一种数据插入方法,如图4所示。在构建复合概要结构时,首先判断完全二叉树是否需要扩容,然后获取数据项的value,将其插入到T中相应的叶节点,并根据节点约束公式(1)(2)来决定该节点是否向上合并到父节点。确定数据项插入到节点的位置后,向节点中的BloomFilter和HyperLogLogPlus插入本条数据项的key。在插入key时,本方法通过HyperLogLogPlus快速判断当前BloomFilter内的基数范围,对基数较大的分区采用Dynamic BloomFilter的方法进行自动扩容,以此保证BloomFilter的误报率在可控范围内。
本方法能够在概要数据结构构建过程中有效处理数据倾斜带来的区间检索误差。数据倾斜会导致分布式结构中某些分区的数据量过大,超过q-digest结构的容量而使得查询结果失效。本发明针对此问题采取的方式为,当插入和压缩节点时,更新整个q-digest结构最大节点容量的属性,当最大节点容量超过BloomFilter的容量时,新建一个复合概要数据结构,分散数据到新的概要结构中,在查询时只需合并概要结构后进行查询操作即可。
3、基于Spark框架的分布式概要数据结构的查询方法
在分布式环境中,通常流数据会被分为若干无关子流到不同的集群节点中进行处理,为了能够支持对整体数据流的查询处理操作,需要对每一部分的子流进行合并操作,但是若合并子流的全部数据,网络通信和I/O开销都很大,并且执行速度很慢。针对这个问题,提出了一种基于Spark框架的分布式概要数据结构的查询方法。本方法采用分位数区间组员查询,其涵盖了分位数查询,该分位数查询为使用q-digest结构就可实现的传统方法,本方法一步提升了使用范围,可以在给定的分区数区间内做组员查询,同时没有损失针对分位数查询的功能。
本方法首先对每个子流中的复合概要数据中进行二次采样,抽取少量顶层概要数据信息以构成全局q-digest结构,再根据具体查询条件先在全局q-digest结构中生成相对应的value查询范围,然后下发查询命令到满足条件的分区内执行具体的查询任务,最后聚合各分区的查询结果并返回。
针对全局查询,本方法可以将多个q-digest结构进行二次合并操作,如图5所示,保证在原有误差范围内的近似查询结果。对多个q-digest结构合并时,为保证在任意分布中各节点BloomFilter不超限,本方法对合并操作做了以下优化:根据HyperLogLogPlus所记录的基数值判断BloomFilter是否超过最佳容量,如果已超过,那么将待加入的BloomFilter直接附加到节点的BloomFilter数组中,之后再进行排序保证含有最小基数的BloomFilter位于最后,其算法见Algorithm 1。
本发明支持流式大数据环境下具有复杂过滤条件的查询操作如下:
区间组员查询,流程如图6所示,具体为:区间组员查询是在给定的分位数区间(q1,q2)(0<q1<q2<1)内查询是否含有给定key值。查询过程中首先根据给定的分位数区间(q1,q2),找出q1、q2相对应的分位点,然后计算出value查询范围[value1,value2],其次后序遍历q-digest结构中的节点,如果当前节点的value被包含在查询范围[value1,value2]中,获取节点对应的BloomFilter;如果有多个节点的value均被包含在查询范围内,则生成节点列表,最后测试待查询元素key是否存在于BloomFilter中。
误差分析
误差分析时本发明涉及如下参数,符号表示与具体含义说明如表1所示:
表1.符号表示与具体含义说明
(1)DBF的假阳性错误概率
BloomFilter是一种以准确度换取空间的紧凑型概率性结构,可能会对某些实际上并不是集合成员的元素返回true(这称为假阳性错误(false-positive error)),因此基于BloomFilter实现的Dynamic BloomFilter也存在假阳性错误。现设定一个基础BloomFilter,其构造参数为m,k,na和ε。通过Dynamic BloomFilter表示动态数据集A时则利用上述提到的基础BloomFilter组成s×m矩阵。简言之,这是一个A→DBF(A)的映射关系,其中Dynamic BloomFilter由s个基础BloomFilter组成。本文用fBF(m,k,na,d)和fDBF(m,k,na,d)来描述第(d+1)个元素插入时,BloomFilter和Dynamic BloomFilter的假阳性错误概率。
如果1≤na≤d,则说明动态数据集A中的元素个数未超过预先设定的BloomFilter的阈值,DBF(A)实际上是一个基础BloomFilter,其假阳性率的计算方式等同于BF(A)的计算方式。根据BloomFilter误差定义,可知
如果d>na,则表示动态数据集A的DBF(A)中有多个基础BloomFilter。
对于组成DBF(A)的前i(1≤i≤s-1)个基础BloomFilter,因其按预先设定的容量na填满,故其假阳性率均为fBF(m,k,na,na)。而DBF(A)中最后一个基础BloomFilter,是DBF(A)未被填满的活跃分量,故其假阳性率为fBF(m,k,na,t),其中t为DBF(A)中的基础BloomFilter所有位都被置为1的概率是因此,DBF(A)的假阳性率为
当DBF(A)中只有一个基础BloomFilter时,公式(4)即退化为公式(3)。
(2)区间组员查询误差
本方法在进行组员查询时,首先根据q-digest结构计算需要查询的分位数区间,该区间可能包含多个查询节点。因此,查询时需要在多个Dynamic BloomFilter中按序查询结果。
设查询区间包含n个查询节点,设第i个节点接收的数据量为di(1≤i≤n)。其中达到阈值na的基础BloomFilter个数为未达到阈值的活跃BF个数为n个,故查询区间内所有Dynamic BloomFilter被置为1的概率为因此,区间组员的误差如下:
(3)q-digest结构对区间组员查询的影响
本方法在查询时首先应用近似查询处理q-digest结构查询分位数区间信息,然后在相应的区间节点中进行组员关系查询。查询是对于给定的分位点q(0<q<1),找出在长度为n的流数据序列中,位于qn处数据项的value值。查询过程中首先后序遍历复合概要结构中的所有节点,加和遍历节点的value值,直到和值大于qn为止,我们返回对应节点的v.max作为分位数的估算值。误差范围表述如下。
若设v是q-digest结构中某个节点,x是v的祖先节点,因为计算在v中的所有value值都有可能出现在v的祖先节点中,因此,q-digest结构在判断分位点时,有不等式:
同时因v服从节点约束公式(1),所以v的最大误差为:
其中logσ是二叉树高度,n是流数据的第一范数,k为压缩参数。
q-digest结构仅在选取数据序列时存在误差,当所查询的分位点数值存在于某一节点时,返回一个可能偏大的值作为分位数的估算值,因此在组员查询时就可能在会将较大范围内的值也估计在内,例如实际上分位点0.6的查询值为58,分位点0.65的查询值为60,查询区间(0.5-0.6)中是否存在值60时,可能会认为60存在于该区间中。因q-digest结构返回的是一个分位点的数据值,Dynamic BloomFilter返回的是一个bool值,故不形成误差累积。
实验数据与结论
本查询方法具有空间效率高、估算精度高,同时能够支持多种复杂过滤条件下的查询操作等优点。可以针对不同的数据发布对不断到达的数据进行即时调整,适用于流式大数据环境下的在线处理与分析。下面通过进一步的实验分析例证本方法的优势。
本方法在Spark环境下进行测试,选用PageCount数据集,数据规模为140万条,约1G。每一条数据包含五个字段,形如data=(timestamp,languagetype,parameter,count,countall),本文采用timestamp,countall两个属性作为键值对<key,value>的参数。本发明在上百G数据的测试中同样也无压力。
1、区间组员查询测试
在进行区间组员查询测试时,重点对本发明在分布式环境下的进行测试。通过对分布式环境下设定不同分区数时构建复合概要结构的时间统计。
1)性能测试
本发明可在每个分区中构建合适数量的复合概要结构,如图7所示,随着分区数的增多,构建所用时间明显减少;
如图8所示,将q-digest结构聚合到Client端时,随着分区数的增大,将多个分区的q-digest结构聚合的时间会有一定的增长,但是增长的幅度远远小于多个分区下构建复合概要结构所用时间的下降幅度,因此在分布式环境下,本算法的优势不言而喻。
如图9所示,查询响应时间随着分区数的增大有一定幅度的上升,但是由图10可见,同时误差率在下降。
2)分布式环境与单机环境执行时间对比
本文分别在分布式环境和单机中执行本文所提出的算法,将单机中执行的加载数据和构建复合概要数据结构的时间与分布式环境下不同分区数下加载和构建的时间作比,如图11所示,由图可见本算法在分布式环境中有一定的加速效果,随着分区数的增多,对于同样的数据量,执行时间在逐步减少。
实验数据证明本发明所描述的算法适用于分布式环境。在分布式环境中,随着分区数的增加,本发明表现出良好的构建性能,并且能够提供高精度的近似查询结果。
2、分位数查询
分位数查询是数据统计中一种比较重要的复杂查询方式。作为Spark平台上典型的类SQL查询,SparkSQL提供percentile函数以支持分位数查询。在SparkSQL平台上执行查询与本文所设计的查询方法做比对,根据图12和图13可发现,本方法以一定的计算误差换取了大量的空间,适用于大数据环境下不需要十分精确的查询结果,但需要低空间复杂度的应用场景。
测试所用SQL语句:
select percentile(countall,array(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1))from pagecount。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (10)
1.一种基于Spark框架的分布式概要数据结构的构建方法,其步骤包括:
在基于Spark框架的分布式环境下,以<key,value>的形式接收流数据;
获取流数据的数据元素的value值,构建由二叉树可存储内容的节点组成的q-digest结构,将value值插入到q-digest结构相应的叶节点中;该q-digest结构的节点包括BloomFilter、HyperLogLogPlus;
由下向上逐层检查各节点是否满足节点约束条件,如果满足,则通过HyperLogLogPlus判断当前BloomFilter是否超出最佳容量,否则向上合并至父节点;
如果BloomFilter未超出最佳容量,则将数据元素的key插入到节点的BloomFilter,否则新建BloomFilter以插入数据元素的key;
将数据元素的key插入到HyperLogLogPlus中,完成分布式概要数据的动态构建。
2.根据权利要求1所述的构建方法,其特征在于,在插入value值时,如果二叉树无法完全容纳value值,则对二叉树进行扩容或对二叉树各节点进行全局压缩。
3.根据权利要求1所述的构建方法,其特征在于,采用Dynamic BloomFilter方法新建BloomFilter。
4.根据权利要求1所述的构建方法,其特征在于,所述节点约束条件为:
其中节点v非叶节点;
其中节点v非根节点;
其中,vp是v的父节点,vs是v的兄弟节点,k是所述q-digest结构的压缩参数,n是所有节点value值的总和。
5.一种基于Spark框架的分布式概要数据结构的查询方法,其步骤包括:
对流数据的各子流的q-digest结构进行二次采样,抽取顶层概要数据信息,构建全局q-digest结构;
在全局q-digest结构中生成value值查询范围,对满足该查询范围条件的分区进行查询;
聚合各分区查询结果;
将流数据的各子流的q-digest结构进行合并,进行全局查询,获得在上述分区查询结果的误差范围内的近似查询结果。
6.根据权利要求5所述的查询方法,其特征在于,合并各子流的q-digest结构的方法步骤包括:
将各子流的q-digest结构的对应层次的节点的计数器进行整数相加;
如果BloomFilter未超过最佳容量,则直接合并BloomFilter;
如果BloomFilter超过最佳容量,则将待合并的BloomFilter直接附加到节点的BloomFilter数组中,排序并将含有最小基数的BloomFilter排在最后;
合并HyperLogLogPlus,实现各q-digest结构的合并。
7.根据权利要求6所述的查询方法,其特征在于,根据HyperLogLogPlus所记录的基数值判断BloomFilter是否超过最佳容量。
8.根据权利要求5所述的查询方法,其特征在于,查询的方法步骤包括:
根据给定的分位数区间(q1,q2),找出q1、q2相对应的分位点,计算出value查询范围[value1,value2];
后序遍历q-digest结构中的节点,如果当前节点的value被包含在所述查询范围内,则获取该节点对应的BloomFilter;
如果有多个节点的value均被包含在所述查询范围内,则生成节点列表;
测试待查询数据元素的key是否存在于每个节点的BloomFilter中。
9.根据权利要求8所述的查询方法,其特征在于,所述q1、q2取值为0<q1<q2<1。
10.一种基于Spark框架的分布式概要数据结构的构建及查询系统,包括存储器和处理器,该储存器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述权利要求1-4任一所述的构建方法和上述权利要求5-9任一所述的查询方法的各步骤指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810113980.4A CN108388603B (zh) | 2018-02-05 | 2018-02-05 | 基于Spark框架的分布式概要数据结构的构建方法及查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810113980.4A CN108388603B (zh) | 2018-02-05 | 2018-02-05 | 基于Spark框架的分布式概要数据结构的构建方法及查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108388603A true CN108388603A (zh) | 2018-08-10 |
CN108388603B CN108388603B (zh) | 2022-05-17 |
Family
ID=63075243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810113980.4A Expired - Fee Related CN108388603B (zh) | 2018-02-05 | 2018-02-05 | 基于Spark框架的分布式概要数据结构的构建方法及查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108388603B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783520A (zh) * | 2018-12-26 | 2019-05-21 | 东华大学 | 基于滑动窗口的可伸缩的大规模流数据顺序特征维持方法 |
CN109885597A (zh) * | 2019-01-07 | 2019-06-14 | 平安科技(深圳)有限公司 | 基于机器学习的用户分群处理方法、装置及电子终端 |
CN110162574A (zh) * | 2019-05-27 | 2019-08-23 | 上海达梦数据库有限公司 | 数据重分布方式的确定方法、装置、服务器及存储介质 |
CN110287038A (zh) * | 2019-06-10 | 2019-09-27 | 天翼电子商务有限公司 | 提升Spark Streaming框架的数据处理效率的方法及系统 |
CN113434907A (zh) * | 2021-07-09 | 2021-09-24 | 四川大学 | 一种面向私有数据集的安全高效分位数聚合方法及装置 |
WO2024016731A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 数据点查询方法、装置、设备集群、程序产品及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093424A1 (en) * | 2001-09-10 | 2003-05-15 | Seok-Ju Chun | Dynamic update cube and hybrid query search method for range-sum queries |
CN103544258A (zh) * | 2013-10-16 | 2014-01-29 | 国家计算机网络与信息安全管理中心 | 一种大数据多区间查询条件下的基数估计方法及装置 |
CN104090962A (zh) * | 2014-07-14 | 2014-10-08 | 西北工业大学 | 面向海量分布式数据库的嵌套查询方法 |
CN104657450A (zh) * | 2015-02-05 | 2015-05-27 | 中国科学院信息工程研究所 | 面向大数据环境的概要信息动态构建与查询方法及装置 |
CN105045806A (zh) * | 2015-06-04 | 2015-11-11 | 中国科学院信息工程研究所 | 一种面向分位数查询的概要数据动态分裂与维护方法 |
US20170024452A1 (en) * | 2015-07-24 | 2017-01-26 | Oracle International Corporation | System and method for creating an intelligent synopsis of a database using re-partitioning based sampling |
-
2018
- 2018-02-05 CN CN201810113980.4A patent/CN108388603B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093424A1 (en) * | 2001-09-10 | 2003-05-15 | Seok-Ju Chun | Dynamic update cube and hybrid query search method for range-sum queries |
CN103544258A (zh) * | 2013-10-16 | 2014-01-29 | 国家计算机网络与信息安全管理中心 | 一种大数据多区间查询条件下的基数估计方法及装置 |
CN104090962A (zh) * | 2014-07-14 | 2014-10-08 | 西北工业大学 | 面向海量分布式数据库的嵌套查询方法 |
CN104657450A (zh) * | 2015-02-05 | 2015-05-27 | 中国科学院信息工程研究所 | 面向大数据环境的概要信息动态构建与查询方法及装置 |
CN105045806A (zh) * | 2015-06-04 | 2015-11-11 | 中国科学院信息工程研究所 | 一种面向分位数查询的概要数据动态分裂与维护方法 |
US20170024452A1 (en) * | 2015-07-24 | 2017-01-26 | Oracle International Corporation | System and method for creating an intelligent synopsis of a database using re-partitioning based sampling |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783520A (zh) * | 2018-12-26 | 2019-05-21 | 东华大学 | 基于滑动窗口的可伸缩的大规模流数据顺序特征维持方法 |
CN109885597A (zh) * | 2019-01-07 | 2019-06-14 | 平安科技(深圳)有限公司 | 基于机器学习的用户分群处理方法、装置及电子终端 |
CN109885597B (zh) * | 2019-01-07 | 2023-05-30 | 平安科技(深圳)有限公司 | 基于机器学习的用户分群处理方法、装置及电子终端 |
CN110162574A (zh) * | 2019-05-27 | 2019-08-23 | 上海达梦数据库有限公司 | 数据重分布方式的确定方法、装置、服务器及存储介质 |
CN110287038A (zh) * | 2019-06-10 | 2019-09-27 | 天翼电子商务有限公司 | 提升Spark Streaming框架的数据处理效率的方法及系统 |
CN113434907A (zh) * | 2021-07-09 | 2021-09-24 | 四川大学 | 一种面向私有数据集的安全高效分位数聚合方法及装置 |
WO2024016731A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 数据点查询方法、装置、设备集群、程序产品及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108388603B (zh) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108388603A (zh) | 基于Spark框架的分布式概要数据结构的构建方法及查询方法 | |
Yangui et al. | Automatic transformation of data warehouse schema to NoSQL data base: comparative study | |
CN106777163A (zh) | 基于红黑树的ip地址所属地查询方法及系统 | |
CN110909111A (zh) | 基于知识图谱rdf数据特征的分布式存储与索引方法 | |
US11294816B2 (en) | Evaluating SQL expressions on dictionary encoded vectors | |
CN107491508B (zh) | 一种基于循环神经网络的数据库查询时间预测方法 | |
CN103324765A (zh) | 一种基于列存储的多核并行数据查询优化方法 | |
US11947596B2 (en) | Index machine | |
Kan et al. | Topology modeling and analysis of a power grid network using a graph database | |
CN105045806A (zh) | 一种面向分位数查询的概要数据动态分裂与维护方法 | |
CN116244333A (zh) | 一种基于代价因子校准的数据库查询性能预测方法及系统 | |
CN113704565B (zh) | 基于全局区间误差的学习型时空索引方法、装置及介质 | |
Zheng et al. | k-dominant Skyline query algorithm for dynamic datasets | |
CN110765319B (zh) | 一种提高Janusgraph路径探索性能的方法 | |
CN110489448A (zh) | 基于Hadoop的大数据关联规则的挖掘方法 | |
Wang et al. | RODA: A fast outlier detection algorithm supporting multi-queries | |
Zou et al. | A learned prefix bloom filter for spatial data | |
Wang et al. | Spatial queries based on learned index | |
Cai et al. | Big data mining analysis method based on cloud computing | |
CN116821171B (zh) | 一种生成新虚拟视图加速计算任务的方法 | |
Wang et al. | RDF Multi-query optimization algorithm based on triple pattern reordering | |
CN113434540B (zh) | 支持左外连接的应用驱动数据生成中依赖关系生成方法及系统 | |
US20240152515A1 (en) | Query graph embedding | |
Yang et al. | BOAI: Fast alternating decision tree induction based on bottom-up evaluation | |
Wang | An Improved Sequential Pattern Mining Algorithm Based on Data Ming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20220517 |