CN112783644A - 一种基于高频键值计数的分布式倾斜流处理方法和*** - Google Patents

一种基于高频键值计数的分布式倾斜流处理方法和*** Download PDF

Info

Publication number
CN112783644A
CN112783644A CN202011629933.9A CN202011629933A CN112783644A CN 112783644 A CN112783644 A CN 112783644A CN 202011629933 A CN202011629933 A CN 202011629933A CN 112783644 A CN112783644 A CN 112783644A
Authority
CN
China
Prior art keywords
data item
key
frequency
value
downstream
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
Application number
CN202011629933.9A
Other languages
English (en)
Other versions
CN112783644B (zh
Inventor
唐卓
郭耀莲
李肯立
刘园春
罗文明
宋莹洁
阳王东
曹嵘晖
肖国庆
刘楚波
周旭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan University
Original Assignee
Hunan University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan University filed Critical Hunan University
Priority to CN202011629933.9A priority Critical patent/CN112783644B/zh
Publication of CN112783644A publication Critical patent/CN112783644A/zh
Application granted granted Critical
Publication of CN112783644B publication Critical patent/CN112783644B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24568Data stream processing; Continuous queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于高频键值计数的分布式倾斜流处理方法和***,其基本思路在于,使用计数式布隆过滤器对数据流中每个数据项进行计数,根据频数将该数据项分别识别为高频键、潜在高频键和低频键,进而得到不同数据项的分布,对高频键采用添加随机后缀再分组聚合的策略分配下游实例,对非高频键采用键值分组策略分配下游实例,从而实现不同下游实例间的负载均衡,提高***性能。本发明能解决倾斜流处理方法中的随机分组下游实例的内存开销极大和键值分组下游实例间负载不均衡的技术问题。

Description

一种基于高频键值计数的分布式倾斜流处理方法和***
技术领域
本发明属于大数据处理领域,更具体地,涉及一种基于高频键值计数的分布式倾斜流处理方法和***。
背景技术
随着大数据技术的发展,在社交网络、金融数据分析、电子商务交易等领域出现了大量基于数据流的应用。相较于传统数据,数据流具有动态、高速、海量、无限等特点,传统分布式处理方法无法预测和控制数据流到达的时间和规模,当数据到来的规模极大时,传统分布式处理方法处理性能急剧下降。为了应对上述挑战,基于S4、Storm、SparkStreaming、Flink等分布式流处理***的方法应运而生。此外,实际应用中的数据流分布是高度倾斜的,即数据流中各个数据的频数相差较大。
分布式流处理方法通过逻辑拓扑的方式将分布式流处理***中运行节点组织连接成一个应用处理流程,这些连接信息通常表示为一个有向无环图,图中的顶点代表应用中的一个操作,边代表操作间数据流的流向。分布式流处理***为每个数据操作创建多个下游实例,流处理方法中分组策略的目的就是将上游操作发送的数据进行分组,并分别分配到各个下游实例中,因此流处理的分组策略直接影响到各下游实例所处理数据的数量和分布情况。现有的分布式流处理的基本分组方法包括随机分组和键值分组,其中随机分组采用轮询机制,将每个数据项以等概率的形式分配给每个下游实例,易于实现***工作量的均匀分布;键值分组基于哈希运算将相同键的数据项分配给一个下游实例,每个数据项的键的状态仅由一个下游实例维护。
然而,现有的分布式倾斜流处理方法存在以下技术问题:随机分组中每个下游实例都要维护所有键的状态,下游实例的内存开销极大;而键值分组将相同键分配给同一个下游实例,不同键的值相差较大,导致下游实例间负载不均衡,并且随着数据流倾斜度的增加,下游实例间的负载不均衡更严重。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于高频键值计数的分布式倾斜流处理方法和***,其目的在于解决倾斜流处理方法中的随机分组下游实例的内存开销极大和键值分组下游实例间负载不均衡的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于高频键值计数的分布式倾斜流处理方法,包括如下步骤:
(1)获取数据流中待处理的数据项ei,和数据流中在数据项ei之前已处理的数据项总数M;
(2)判断数据项ei是否位于高频键集S中,如果是,则将高频键集S中与该数据项相同的键所对应的值加1,然后进入步骤(10),否则进入步骤(3);
(3)使用计数式布隆过滤器对数据项ei进行处理,以得到该数据项ei的频数fi
(4)判断数据项ei的频数fi大小是否大于等于高频键阈值ε,如果是,则进入步骤(5),否则转入步骤(6);
(5)判断高频键集S中已有键数是否等于高频键集最大键数C,如果是,则将数据项ei替换高频键集S中值最小的键,并将该键的值设置为fi+fmin,其中fmin是高频键集S中键的最小值,然后转入步骤(10);否则,将数据项ei及频数fi作为新的键值***高频键集S中,然后转入步骤(10);
(6)判断数据项ei的频数fi大小是否大于等于低频键阈值θ,如果是,则转入步骤(9),否则进入步骤(7);
(7)判断低频键队列Q是否已满,如果是,则先删除低频键队列Q中头节点的数据项eh,再将数据项ei***低频键队列Q中,然后进入步骤(8),否则,直接将数据项ei***低频键队列Q中,然后转入步骤(9);
(8)判断低频键队列Q中头节点的数据项eh的衰减概率
Figure BDA0002878296830000031
是否大于随机数r,如果是,则使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,以得到该数据项eh更新后的频数,然后进入步骤(9),其中b为预设的指数底数,b>1且b≈1,fh为低频键队列Q中头节点的数据项eh的频数,r为随机数产生器生成的范围为[0,1)的随机数;否则进入步骤(9);
(9)采用键值分组算法为数据项ei分配下游实例,并将数据流中已处理的数据项总数M加1,过程结束;
(10)根据高频键集S中与数据项ei相同的键所对应的值大小,确定该键可以被分配的下游实例数,并根据确定的下游实例数从下游实例中选择一个下游实例,将选择的下游实例分配给数据项ei,并将数据流中已处理的数据项总数M加1,过程结束。
优选地,步骤(2)中的高频键集S是通过空间节省算法中基于流摘要的数据结构实现,高频键集S中相同计数值的键链接在同一个链表中,并指向同一个父桶,高频键集S中的不同父桶间使用双向链表链接。
优选地,步骤(3)中的计数式布隆过滤器是一个包含w个计数器的数组B={B[0],B[1],…,B[w-1]},首先,计数式布隆过滤器利用t个不同的哈希函数h1(),h2(),...,ht()计算数据项ei所分别对应的哈希值h1(ei),h2(ei),...,ht(ei),然后,计算得到每个哈希值模w以后的处理结果h1(ei)%w,h2(ei)%w,...,ht(ei)%w,其后,将数组B中等于各个处理结果的元素分别加1,并将得到的所有元素中的最小值作为数据项ei的频数fi
优选地,步骤(4)中的高频键阈值ε是由获取数据项ei之前,数据流中已处理的数据项的总数M决定,且有
Figure BDA0002878296830000041
优选地,步骤(8)中使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,是对低频键队列Q中头节点的数据项eh在CBF中对应的数组B中的元素进行减1。
优选地,步骤(10)包括如下子步骤:
(10-1)判断高频键集S中键的最大值与最小值之差fmax-fmin的大小是否大于M/m,其中m为下游实例数,如果是,则进入步骤(10-2),否则转入步骤(10-5);
(10-2)判断数据项ei在高频键集S中是否为值最大的键,如果是,则为该数据项对应的键分配m个下游实例,对该数据项ei随机添加预设的m个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-3);
(10-3)判断数据项ei在高频键集S中是否为值最小的键,如果是,则为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-4);
(10-4)为高频键集S中值居中的键分配
Figure BDA0002878296830000042
个下游实例,对该数据项ei随机添加预设的与下游实例个数相同的随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束;
(10-5)为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束。
按照本发明的另一方面,提供了一种基于高频键值计数的分布式倾斜流处理***,包括如下模块:
第一模块,用于获取数据流中待处理的数据项ei,和数据流中在数据项ei之前已处理的数据项总数M;
第二模块,用于判断数据项ei是否位于高频键集S中,如果是,则将高频键集S中与该数据项相同的键所对应的值加1,然后进入第十模块,否则进入第三模块;
第三模块,用于使用计数式布隆过滤器对数据项ei进行处理,以得到该数据项ei的频数fi
第四模块,用于判断数据项ei的频数fi大小是否大于等于高频键阈值ε,如果是,则进入第五模块,否则转入第六模块;
第五模块,用于判断高频键集S中已有键数是否等于高频键集最大键数C,如果是,则将数据项ei替换高频键集S中值最小的键,并将该键的值设置为fi+fmin,其中fmin是高频键集S中键的最小值,然后转入第十模块;否则,将数据项ei及频数fi作为新的键值***高频键集S中,然后转入第十模块;
第六模块,用于判断数据项ei的频数fi大小是否大于等于低频键阈值θ,如果是,则转入第九模块,否则进入第七模块;
第七模块,用于判断低频键队列Q是否已满,如果是,则先删除低频键队列Q中头节点的数据项eh,再将数据项ei***低频键队列Q中,然后进入第八模块,否则,直接将数据项ei***低频键队列Q中,然后转入第九模块;
第八模块,用于判断低频键队列Q中头节点的数据项eh的衰减概率
Figure BDA0002878296830000051
Figure BDA0002878296830000052
是否大于随机数r,如果是,则使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,以得到该数据项eh更新后的频数,然后进入第九模块,其中b为预设的指数底数,b>1且b≈1,fh为低频键队列Q中头节点的数据项eh的频数,r为随机数产生器生成的范围为[0,1)的随机数;否则进入第九模块;
第九模块,用于采用键值分组算法为数据项ei分配下游实例,并将数据流中已处理的数据项总数M加1;
第十模块,用于根据高频键集S中与数据项ei相同的键所对应的值大小,确定该键可以被分配的下游实例数,并根据确定的下游实例数从下游实例中选择一个下游实例,将选择的下游实例分配给数据项ei,并将数据流中已处理的数据项总数M加1。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明的步骤(2)中对高频键集采用轻量级的数据结构进行存储,具有很高的空间效率,便于下游实例将该集合加载至内存中,同时对该高频键集支持快速O(1)在线查询和更新,实现快速地选择下游实例分配给其中的键;
(2)本发明的步骤(3)中使用计数式布隆过滤器监控数据流中每个数据项,计数式布隆过滤器具有很高的计算和内存效率,同时支持数据项的***和删除;
(3)本发明的步骤(6)中使用有限长度的低频键队列缓存低频键,并根据队列先进先出的特点,以一定衰减概率来剔除保存在计数式布隆过滤器中的低频键,衰减概率能过滤掉相对较小的低频键,节省了计数式布隆过滤器的内存占用,也减少了不同数据项间哈希运算结果冲突的概率;
(4)本发明的步骤(7)中,对高频键集中的键根据值大小进行区分,对键值相差不大的键均分给2个下游实例,对键值相差较大的键根据值大小分配不同的下游实例,分配下游实例数能根据数据流的变化动态更新,从而实现各个下游实例间的负载均衡,并且针对键值相对小的键分配少的下游实例,减少了不必要的内存开销。
附图说明
图1是本发明的处理过程示意图;
图2是本发明的方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的基本思路在于,如图1所示,使用计数式布隆过滤器(Counting BloomFilter,简称CBF)对数据流进行计数,根据频数将数据项分别识别为高频键、潜在高频键和低频键,进而得到不同数据项的分布,将高频键保存在高频键集中,将低频键保存在低频键队列中,对高频键采用添加随机后缀再分组聚合的策略分配下游实例,对非高频键采用键值分组策略分配下游实例,从而实现不同下游实例间的负载,提高***性能。
如图2所示,本发明提供一种基于高频键值计数的分布式倾斜流处理方法,包括如下步骤:
(1)获取数据流中待处理的数据项ei,和数据流中在数据项ei之前已处理的数据项总数M;
具体而言,数据流中已处理的数据项总数M的初始值为0,随着数据流中每个数据项依次处理,统计并更新已处理的数据项总数M。
(2)判断数据项ei是否位于高频键集S中,如果是,则将高频键集S中与该数据项相同的键(key)所对应的值(value)加1,然后进入步骤(10),否则进入步骤(3);
具体而言,高频键集S的格式是例如{(value1,key1,key2),(value2,key3),…},其中(value1,key1,key2)为高频键集S中的一个记录,每个记录中有且仅有一个值,但可以有一个或多个键,高频键集S的最大键数为C,其中C根据预设的预期误差∈来设定,并有
Figure BDA0002878296830000081
key1,key2,key3表示键,value1和value2表示值。
本步骤中判断每个数据项ei是否位于高频键集S中,是通过判断高频键集S中的键是否和数据项ei一致,如果是,则说明获取数据项ei之前,数据流中已处理的数据项里记录该数据项为高频键,即直接将数据项ei在高频键集中对应键的值累加统计。
优选地,高频键集S是通过空间节省(Space Saving)算法中基于流摘要(StreamSummary)的数据结构实现,高频键集S中相同计数值的键链接在同一个链表中,并指向同一个父桶(即Bucket),高频键集S中的不同父桶间使用双向链表链接。
例如,当前收到待处理的数据项为{talk,namespace,first,title,wiki},高频键集S中已有记录{(255,namespace),(84,first,case),(61,letter),(35,word)},数据项talk、title和wiki不在高频键集S中,进入步骤(2)处理,下一个数据项namespace和first在高频键集S中,则对应的值加1,因此高频键集S更新为{(256,namespace),(85,first),(84,case),(61,letter),(35,word)}。
(3)使用计数式布隆过滤器(Counting Bloom Filter,简称CBF)对数据项ei进行处理,以得到该数据项ei的频数fi
具体而言,CBF是一个包含w个计数器的数组B={B[0],B[1],…,B[w-1]},本步骤具体为,首先,CBF利用t个不同的哈希函数h1(),h2(),...,ht()计算数据项ei所分别对应的哈希值h1(ei),h2(ei),...,ht(ei),然后,计算得到每个哈希值模w以后的处理结果h1(ei)%w,h2(ei)%w,...,ht(ei)%w,其后,将数组B中等于各个处理结果的元素分别加1,并将得到的所有元素中的最小值作为数据项ei的频数fi
其中,CBF的哈希函数个数t优选设置为
Figure BDA0002878296830000091
n为数据流中数据项的种类数;计数器的个数w优选为
Figure BDA0002878296830000092
δ为CBF的错误率误差;CBF支持数据项***时进行计数器加1的处理,还支持数据项删除时进行计数器减1的处理。
本步骤中得到的数据项ei的频数fi,包括了获取数据项ei之前,数据流中已处理的数据项里数据项ei的累计值,CBF随着数据流的到来而不断更新;CBF使用多个哈希函数,并将最小值作为统计频数,是为了减少不同数据项间的哈希冲突概率,提高统计的精度。
就步骤(2)中的实例而言,假设获取数据项talk之前,数据流中已处理的数据项里数据项talk在CBF中记录的频数为24,数据项title在CBF中记录的频数为29,经过本步骤处理后,数据项talk返回的频数为25,数据项title返回的频数是30,数据项wiki返回的频数为1;
(4)判断数据项ei的频数fi大小是否大于等于高频键阈值ε,如果是,则表示该数据项为高频键,然后进入步骤(5),否则表示该数据项为非高频键,然后转入步骤(6);
具体而言,高频键阈值ε是由获取数据项ei之前,数据流中已处理的数据项的总数M决定,且有
Figure BDA0002878296830000093
就步骤(2)中的实例而言,假设获取数据项talk之前,数据流中已处理的数据项总数M=1203,预期误差∈=0.05(即C=1/∈=20),高频键阈值
Figure BDA0002878296830000094
则数据项talk是非高频键;获取数据项title之前,数据流中已处理数据项总数M=1206,高频键阈值ε=30,则数据项title是高频键;数据项wiki是非高频键;
(5)判断高频键集S中已有键数是否等于高频键集最大键数C,如果是,则将数据项ei替换高频键集S中值最小的键,并将该键的值设置为fi+fmin,其中fmin是高频键集S中键的最小值,然后转入步骤(10);否则,将数据项ei及频数fi作为新的键值***高频键集S中,然后转入步骤(10);
就步骤(2)中的实例而言,数据项title为高频键,且当前高频键集S中已有键数未超过C,直接将数据项title***高频键集S中,得到更新后的高频键集S为{(256,namespace),(85,first),(84,case),(61,letter),(35,word),(30,title)}。
(6)判断数据项ei的频数fi大小是否大于等于低频键阈值θ,如果是,则该认为数据项ei是潜在高频键,然后转入步骤(9),否则进入步骤(7);
具体而言,低频键阈值θ的取值范围是[2,10],优选为5;
(7)判断低频键队列Q是否已满,如果是,则先删除低频键队列Q中头节点的数据项eh,再将数据项ei***低频键队列Q中,然后进入步骤(8),否则,直接将数据项ei***低频键队列Q中,然后转入步骤(9);
其中低频键队列Q的长度等于C,即与高频键集最大键数相同,实际应用中可根据数据流大小来调整队列长度;
(8)判断低频键队列Q中头节点的数据项eh的衰减概率
Figure BDA0002878296830000101
是否大于随机数r,如果是,则使用CBF对低频键队列Q中头节点的数据项eh进行更新,以得到该数据项eh更新后的频数,然后进入步骤(9),其中b为预设的指数底数,b>1且b≈1,fh为低频键队列Q中头节点的数据项eh的频数,r为随机数产生器生成的范围为[0,1)的随机数;否则进入步骤(9);
具体而言,使用CBF对低频键队列Q中头节点的数据项eh进行更新,是对低频键队列Q中头节点的数据项eh在CBF中对应的数组B中的元素进行减1。
就步骤(2)中的实例而言,数据项talk的频数为25,则继续保存在CBF中;数据项wiki需要***低频键队列Q中,但此时低频键队列Q中已有数据项{page,transnational,ns,ns,ce,page,…,user},长度为20,已满,***数据项wiki前要删除低频键队列Q中头节点的数据项page,同时查询低频键队列Q中头节点的数据项page在CBF中保存的频数f,计算衰减概率p=b-f,产生[0,1)间任意随机数,小于衰减概率p时将CBF中数据项page对应的数组元素减1。
步骤(3)、步骤(4)和步骤(8)的优点在于,使用内存高效的CBF来监控数据流的每个数据项的频数,一方面设定动态的高频键阈值,能适应数据流的大小变化,更精确的识别出高频键集,提高了高频键的识别精度;另一方面设定低频键阈值,将低频键保存在低频键队列中,并根据队列先进先出的特点,结合衰减概率,对CBF中相应的数组元素减1处理,反向更新CBF,在实际应用数据中能过滤掉大部分低频键,以保证CBF以较小的内存来监控数据流,减少内存开销。
(9)采用键值分组算法为数据项ei分配下游实例,并将数据流中已处理的数据项总数M加1,过程结束;
具体而言,键值分组算法基于哈希运算实现,对数据项经过哈希运算后得到分配的下游实例号,给该数据项分配与该下游实例号对应的下游实例,即相同的键对应的数据项被分配同一个下游实例;
(10)根据高频键集S中与数据项ei相同的键所对应的值大小,确定该键可以被分配的下游实例数,并根据确定的下游实例数从下游实例中选择一个下游实例,将选择的下游实例分配给数据项ei,并将数据流中已处理的数据项总数M加1,过程结束;
具体而言,本步骤包括如下子步骤:
(10-1)判断高频键集S中键的最大值与最小值之差fmax-fmin的大小是否大于M/m,其中m为下游实例数,如果是,则进入步骤(10-2),否则转入步骤(10-5);
(10-2)判断数据项ei在高频键集S中是否为值最大的键,如果是,则为该数据项对应的键分配m个下游实例,对该数据项ei随机添加预设的m个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-3);
具体而言,不同的键可以被分配给不同数量的下游实例,对每个键预设与可以被分配的下游实例数相同个数的随机后缀;根据随机函数生成的随机数序号,对数据项添加相应序号的后缀。
(10-3)判断数据项ei在高频键集S中是否为值最小的键,如果是,则为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-4);
(10-4)为高频键集S中值居中的键分配
Figure BDA0002878296830000121
个下游实例,对该数据项ei随机添加预设的与下游实例个数相同的随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束;
(10-5)为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束。
就步骤(2)中的实例而言,假设下游实例数为m=6,数据流中的数据项namespace到达后,高频键集S更新为{(256,namespace),(84,first,case),(61,letter),(35,word)},此时M=1204,fmax-fmin=221大于M/m=200,所以认为当前的高频键集S中键的值相差较大,namespace是值最大的键,可以被分配给6个下游实例,随机产生一个在[1,6]之间的随机数,namespace通过添加{_1,_2,_3,_4,_5,_6}中随机数对应序号的后缀,对添加了后缀后的数据项经过哈希运算后得到可以分配的下游实例号,将对应的下游实例分配给该数据项;数据流中的数据项first到达后,高频键集S更新为{(256,namespace),(85,first),(84,case),(61,letter),(35,word)},此时M=1205,fmax-fmin=221大于M/m=200,数据项first是值居中的键,可以被分配给
Figure BDA0002878296830000131
个下游实例,随机产生一个在[1,2]之间的随机数,数据项first通过添加{_1,_2}中随机数对应序号的后缀,对添加了后缀后的数据项经过哈希运算后得到可以分配的下游实例号,将对应的下游实例分配给该数据项;数据项title到达后,高频键集S更新为{(256,namespace),(85,first),(84,case),(61,letter),(35,word),(30,title)},此时M=1206,fmax-fmin=226大于M/m=201,数据项title是值最小的键,可以分配2个下游实例,随机产生一个在[1,2]之间的随机数,数据项title通过添加{_1,_2}中随机数对应序号的后缀,对添加了后缀后的数据项经过哈希运算后得到可以分配的下游实例号,将对应的下游实例分配给该数据项。
本步骤的优点在于,对高频键集中的键根据值大小进行区分,对键值相差不大的键均分给2个下游实例,对键值相差较大的键根据值大小分配不同的下游实例,分配下游实例数能根据数据流的变化动态更新,从而实现各个下游实例间的负载均衡,并且对键值相对小的键分配少的下游实例,减少了不必要的内存开销。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种基于高频键值计数的分布式倾斜流处理方法,其特征在于,包括如下步骤:
(1)获取数据流中待处理的数据项ei,和数据流中在数据项ei之前已处理的数据项总数M;
(2)判断数据项ei是否位于高频键集S中,如果是,则将高频键集S中与该数据项相同的键所对应的值加1,然后进入步骤(10),否则进入步骤(3);
(3)使用计数式布隆过滤器对数据项ei进行处理,以得到该数据项ei的频数fi
(4)判断数据项ei的频数fi大小是否大于等于高频键阈值ε,如果是,则进入步骤(5),否则转入步骤(6);
(5)判断高频键集S中已有键数是否等于高频键集最大键数C,如果是,则将数据项ei替换高频键集S中值最小的键,并将该键的值设置为fi+fmin,其中fmin是高频键集S中键的最小值,然后转入步骤(10);否则,将数据项ei及频数fi作为新的键值***高频键集S中,然后转入步骤(10);
(6)判断数据项ei的频数fi大小是否大于等于低频键阈值θ,如果是,则转入步骤(9),否则进入步骤(7);
(7)判断低频键队列Q是否已满,如果是,则先删除低频键队列Q中头节点的数据项eh,再将数据项ei***低频键队列Q中,然后进入步骤(8),否则,直接将数据项ei***低频键队列Q中,然后转入步骤(9);
(8)判断低频键队列Q中头节点的数据项eh的衰减概率
Figure FDA0002878296820000011
是否大于随机数r,如果是,则使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,以得到该数据项eh更新后的频数,然后进入步骤(9),其中b为预设的指数底数,b>1且b≈1,fh为低频键队列Q中头节点的数据项eh的频数,r为随机数产生器生成的范围为[0,1)的随机数;否则进入步骤(9);
(9)采用键值分组算法为数据项ei分配下游实例,并将数据流中已处理的数据项总数M加1,过程结束;
(10)根据高频键集S中与数据项ei相同的键所对应的值大小,确定该键可以被分配的下游实例数,并根据确定的下游实例数从下游实例中选择一个下游实例,将选择的下游实例分配给数据项ei,并将数据流中已处理的数据项总数M加1,过程结束。
2.如权利要求1所述的基于高频键值计数的分布式倾斜流处理方法,其特征在于,步骤(2)中的高频键集S是通过空间节省算法中基于流摘要的数据结构实现,高频键集S中相同计数值的键链接在同一个链表中,并指向同一个父桶,高频键集S中的不同父桶间使用双向链表链接。
3.如权利要求1所述的基于高频键值计数的分布式倾斜流处理方法,其特征在于,步骤(3)中的计数式布隆过滤器是一个包含w个计数器的数组B={B[0],B[1],...,B[w-1]},首先,计数式布隆过滤器利用t个不同的哈希函数h1(),h2(),...,ht()计算数据项ei所分别对应的哈希值h1(ei),h2(ei),...,ht(ei),然后,计算得到每个哈希值模w以后的处理结果h1(ei)%w,h2(ei)%w,…,ht(ei)%w,其后,将数组B中等于各个处理结果的元素分别加1,并将得到的所有元素中的最小值作为数据项ei的频数fi
4.如权利要求1所述的基于高频键值计数的分布式倾斜流处理方法,其特征在于,步骤(4)中的高频键阈值ε是由获取数据项ei之前,数据流中已处理的数据项的总数M决定,且有
Figure FDA0002878296820000021
5.如权利要求1所述的基于高频键值计数的分布式倾斜流处理方法,其特征在于,步骤(8)中使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,是对低频键队列Q中头节点的数据项eh在CBF中对应的数组B中的元素进行减1。
6.如权利要求1所述的基于高频键值计数的分布式倾斜流处理方法,其特征在于,步骤(10)包括如下子步骤:
(10-1)判断高频键集S中键的最大值与最小值之差fmax-fmin的大小是否大于M/m,其中m为下游实例数,如果是,则进入步骤(10-2),否则转入步骤(10-5);
(10-2)判断数据项ei在高频键集S中是否为值最大的键,如果是,则为该数据项对应的键分配m个下游实例,对该数据项ei随机添加预设的m个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-3);
(10-3)判断数据项ei在高频键集S中是否为值最小的键,如果是,则为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束,否则进入步骤(10-4);
(10-4)为高频键集S中值居中的键分配
Figure FDA0002878296820000031
个下游实例,对该数据项ei随机添加预设的与下游实例个数相同的随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束;
(10-5)为该数据项对应的键分配2个下游实例,对该数据项ei随机添加预设的2个随机后缀中的一个后缀,对添加了后缀后的数据项进行哈希运算后以得到分配的下游实例号,将该下游实例号对应的下游实例分配给该数据项ei,过程结束。
7.一种基于高频键值计数的分布式倾斜流处理***,其特征在于,包括如下模块:
第一模块,用于获取数据流中待处理的数据项ei,和数据流中在数据项ei之前已处理的数据项总数M;
第二模块,用于判断数据项ei是否位于高频键集S中,如果是,则将高频键集S中与该数据项相同的键所对应的值加1,然后进入第十模块,否则进入第三模块;
第三模块,用于使用计数式布隆过滤器对数据项ei进行处理,以得到该数据项ei的频数fi
第四模块,用于判断数据项ei的频数fi大小是否大于等于高频键阈值ε,如果是,则进入第五模块,否则转入第六模块;
第五模块,用于判断高频键集S中已有键数是否等于高频键集最大键数C,如果是,则将数据项ei替换高频键集S中值最小的键,并将该键的值设置为fi+fmin,其中fmin是高频键集S中键的最小值,然后转入第十模块;否则,将数据项ei及频数fi作为新的键值***高频键集S中,然后转入第十模块;
第六模块,用于判断数据项ei的频数fi大小是否大于等于低频键阈值θ,如果是,则转入第九模块,否则进入第七模块;
第七模块,用于判断低频键队列Q是否已满,如果是,则先删除低频键队列Q中头节点的数据项eh,再将数据项ei***低频键队列Q中,然后进入第八模块,否则,直接将数据项ei***低频键队列Q中,然后转入第九模块;
第八模块,用于判断低频键队列Q中头节点的数据项eh的衰减概率p=
Figure FDA0002878296820000041
是否大于随机数r,如果是,则使用计数式布隆过滤器对低频键队列Q中头节点的数据项eh进行更新,以得到该数据项eh更新后的频数,然后进入第九模块,其中b为预设的指数底数,b>1且b≈1,fh为低频键队列Q中头节点的数据项eh的频数,r为随机数产生器生成的范围为[0,1)的随机数;否则进入第九模块;
第九模块,用于采用键值分组算法为数据项ei分配下游实例,并将数据流中已处理的数据项总数M加1;
第十模块,用于根据高频键集S中与数据项ei相同的键所对应的值大小,确定该键可以被分配的下游实例数,并根据确定的下游实例数从下游实例中选择一个下游实例,将选择的下游实例分配给数据项ei,并将数据流中已处理的数据项总数M加1。
CN202011629933.9A 2020-12-31 2020-12-31 一种基于高频键值计数的分布式倾斜流处理方法和*** Active CN112783644B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011629933.9A CN112783644B (zh) 2020-12-31 2020-12-31 一种基于高频键值计数的分布式倾斜流处理方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011629933.9A CN112783644B (zh) 2020-12-31 2020-12-31 一种基于高频键值计数的分布式倾斜流处理方法和***

Publications (2)

Publication Number Publication Date
CN112783644A true CN112783644A (zh) 2021-05-11
CN112783644B CN112783644B (zh) 2023-06-23

Family

ID=75754673

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011629933.9A Active CN112783644B (zh) 2020-12-31 2020-12-31 一种基于高频键值计数的分布式倾斜流处理方法和***

Country Status (1)

Country Link
CN (1) CN112783644B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116319381A (zh) * 2023-05-25 2023-06-23 中国地质大学(北京) 一种通信和资源感知的数据流分组方法及***
CN116346827A (zh) * 2023-05-30 2023-06-27 中国地质大学(北京) 一种面向倾斜数据流的实时分组方法及***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108776698A (zh) * 2018-06-08 2018-11-09 湖南大学 一种基于Spark的抗偏斜的数据分片方法
US10862827B1 (en) * 2016-10-12 2020-12-08 Barefoot Networks, Inc. Network forwarding element with key-value processing in the data plane

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10862827B1 (en) * 2016-10-12 2020-12-08 Barefoot Networks, Inc. Network forwarding element with key-value processing in the data plane
CN108776698A (zh) * 2018-06-08 2018-11-09 湖南大学 一种基于Spark的抗偏斜的数据分片方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MICHAEL MITZENMACHER,ET AL.: "Hierarchical Heavy Hitters with the Space Saving Algorithm", 《HTTPS://ARXIV.ORG/ABS/1102.5540》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116319381A (zh) * 2023-05-25 2023-06-23 中国地质大学(北京) 一种通信和资源感知的数据流分组方法及***
CN116319381B (zh) * 2023-05-25 2023-07-25 中国地质大学(北京) 一种通信和资源感知的数据流分组方法及***
CN116346827A (zh) * 2023-05-30 2023-06-27 中国地质大学(北京) 一种面向倾斜数据流的实时分组方法及***
CN116346827B (zh) * 2023-05-30 2023-08-11 中国地质大学(北京) 一种面向倾斜数据流的实时分组方法及***

Also Published As

Publication number Publication date
CN112783644B (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
JP6716727B2 (ja) ストリーミングデータ分散処理方法及び装置
US8447901B2 (en) Managing buffer conditions through sorting
CN103914399B (zh) 一种并行计算***中的磁盘缓存方法及装置
CN101674233B (zh) 基于彼得森图的存储网络***及数据读写方法
CN101655861B (zh) 基于双计数布鲁姆过滤器的哈希方法和哈希装置
US10002019B2 (en) System and method for assigning a transaction to a serialized execution group based on an execution group limit for parallel processing with other execution groups
CN101515298A (zh) 基于树形数据结构节点的***的方法和存储装置
CN105159604A (zh) 一种磁盘数据读写方法和***
CN110058940B (zh) 一种多线程环境下的数据处理方法及装置
CN107729135B (zh) 按序进行并行数据处理的方法和装置
CN101923558A (zh) 基于(d,k)摩尔图的存储网络结构及数据读写方法
CN112866136B (zh) 业务数据处理方法和装置
CN112783644A (zh) 一种基于高频键值计数的分布式倾斜流处理方法和***
CN112947860B (zh) 一种分布式数据副本的分级存储与调度方法
CN108399175B (zh) 一种数据存储、查询方法及其装置
US8032543B2 (en) Sorting apparatus and method
US7647592B2 (en) Methods and systems for assigning objects to processing units
CN115904246A (zh) 一种基于多路ddr内存的数据读取方法及装置
Afek et al. Recursive design of hardware priority queues
Wang et al. Per-flow queue management with succinct priority indexing structures for high speed packet scheduling
CN113934361A (zh) 用于管理存储***的方法、设备和计算机程序产品
Challenger et al. A Hybrid Distributed Mutual Exclusion Algorithm for Cluster‐Based Systems
US20130290378A1 (en) Adaptive probabilistic indexing with skip lists
CN110716931A (zh) 一种基于哈希指纹的布鲁姆过滤器
Fan et al. Smart-blocking file storage method in cloud computing

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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Li Kenli

Inventor after: Liu Chubo

Inventor after: Zhou Xu

Inventor after: Guo Yaolian

Inventor after: Tang Zhuo

Inventor after: Liu Yuanchun

Inventor after: Luo Wenming

Inventor after: Song Yingjie

Inventor after: Yang Wangdong

Inventor after: Cao Ronghui

Inventor after: Xiao Guoqing

Inventor before: Tang Zhuo

Inventor before: Liu Chubo

Inventor before: Zhou Xu

Inventor before: Guo Yaolian

Inventor before: Li Kenli

Inventor before: Liu Yuanchun

Inventor before: Luo Wenming

Inventor before: Song Yingjie

Inventor before: Yang Wangdong

Inventor before: Cao Ronghui

Inventor before: Xiao Guoqing

GR01 Patent grant
GR01 Patent grant