本发明涉及一种分布式数据流中基于数据分布的负载均衡的分发方法,该方法应用于时空大数据处理,属于分布式计算技术中的实时流式大数据分析处理技术领域,本发明尤其涉及处理突发热点事件数据流负载均衡分发的方法。
背景技术:
云计算、物联网、移动互连、社交媒体等新兴信息技术和应用模式的快速发展,促使全球数据量急剧增加,推动人类社会迈入大数据时代。以移动社交媒体数据为例,每小时都有上千万条微博、签到数据产生,这些数据对于热点话题的分析、舆论导向、用户偏好分析、商品推荐、广告的精确投放等都将产生重要价值。大数据蕴含大信息,大信息提炼大知识,大知识将在更高的层面、更广的视角、更大的范围帮助用户提高洞察力、提升决策力,将为人类社会创造前所未有的重大价值。随着各类传感设备、无线通信技术和智能手机的快速发展,大数据应用系统已得到了普及,广泛应用于众多领域,产生了各种实时流式大数据,例如城市交通管理、网络监控管理、金融交易管理、移动社交网络分析等。人们对隐藏在大数据背后的价值越来越重视,使得流式大数据实时分析处理技术也变得越来越重要。流式大数据的实时性、动态性、无限性、突发性等特征为流式大数据的计算系统带来前所未有的挑战和机遇,并要求系统应具备高性能、实时性、分布性、可扩展性等特征。
目前,基于分布式环境下的流式分布式处理架构已成为应对大流量、低延时数据流处理任务的一种有效解决方案。然而,在现有的基于键值(key-based)的数据分组方法中,由于数据的倾斜分布及数据流本身的实时、动态和分布突发变化等特性,使得分布式数据流并行处理系统存在持续且动态负载不均衡现象,造成系统的时效性降低、硬件资源浪费等诸多问题。而现有的负载均衡的数据分发方案主要基于随机分发或分组数据迁移,随机分发策略虽然能解决负载均衡问题,但忽略了数据的分布,在流式大数据挖掘和分析系统中,数据之间往往存在较大相关性,尤其是空间相关性,在分布式并行计算系统中,要尽量将具有相关性的数据发送到同一节点,而随机分发方式将大大降低系统的并行计算能力,而基于分组数据迁移方法将大大增加网络通信成本。
在分布式流系统中,由于数据流本身的无限性、动态变化性特征,数据倾斜及数据分布状况会随流系统的运行不断变化,使得分布式数据流中的负载均衡问题变的更加复杂。基于mapreduce框架的单次负载均衡调整策略无法直接应用分布式数据流系统。除此之外,传统的单一粒度的网格划分策略,虽然能在一定程度上解决基于数据分布的划分,在解决数据倾斜分布情况下,很难解决负载均衡的数据分组方法,在数据分布突变情况下,需要重新进行数据分发,造成较大的计算代价和网络通信成本。
技术实现要素:
为解决现有实时流式大数据分析处理的上述技术问题,本法提供了一种分布式数据流中基于数据分布的负载均衡分发方法,该方法尤其适用于解决数据流来源分布不均,流量变化明显的事件监控与分析的问题。
为实现上述发明目的,本发明的技术方案如下,
一种分布式数据流中基于数据分布的负载均衡分发方法,包括如下步骤:
1)分布式数据流处理:主机节点维护一个滑动窗口,所述滑动窗口包含有限个等时间长度的时间戳,并且所述滑动窗口存储所有有限个时间戳上的数据点,分布式数据流来自于分布式文件系统,每次读取一个时间戳上的所有数据点;
2)数据点映射:将每个时间戳上的数据点根据数据点的空间坐标属性映射到已被划分的底层网格空间,更新每个底层网格内所包含的数据点;
3)构建层次网格索引树:根据丛机节点数量和统计的当前滑动窗口内的数据点数量得出所有丛机节点的平均负载量,并根据允许的负载缓冲阈值构建层次网格索引树,对所述层次网格索引树中所有网格按照层号和顺序号进行编号;
4)层次网格索引树与数据路由表建立关联:根据步骤3构建的层次网格索引树,遍历所述层次网格索引树,建立数据路由表,针对层次网格索引树构建由若干个数据路由记录组成的数据路由表,其中,每个数据路由记录包括对应网格编号、对应的时间戳信息、分配到的丛机节点编号及该网格的数据点数量,
每条数据路由记录包含一个网格编号,将层次网格索引树中的数据与数据路由表对应起来,数据路由记录中的网格编号对层次网格索引树中的网格数据跟踪,从而在后续数据分发步骤中直接根据数据路由表对各个丛机节点负载进行调整;
5)数据分发:根据数据路由表中的数据路由记录与层次网格索引树中的数据的对应关系,得到每个丛机节点所包含的网格,判断其所包含的网格数据点数量是否满足负载缓冲阈值,若满足,则将层次网格索引树中的数据分发至对应的丛机节点,若不满足,则调整部分网格到其它丛机节点,实现负载均衡分发。
本发明方法中的数据路由记录中包含网格编号与丛机节点编号,对层次网格索引树中的网格数据跟踪,相比于现有分布式数据流分发方法未考虑数据去向,导致个别丛机节点超负载运行,本发明方法结合数据点到层次网格索引树中底层网格的映射,考虑了数据点空间位置相关性,利用分发网格对网格的去向进行跟踪,根据负载缓冲阈值对丛机节点负载进行判断是否超载,将空间临近的数据点分发到其它不超载丛机节点中去的目标。
同时,为了使每个丛机节点所分发的数据点数量低于负载缓冲阈值,需要对层次索引树中的网格进行分配,分配的过程中为了使网格与丛机节点对应,需要对网格进行标记,统计已标记网格中所包含的数据点数量同时对层次索引树中的未标记网格进行路由处理,将层次索引树与数据路由表紧密结合,在后续数据分发步骤中直接根据数据路由表对各个丛机节点负载进行调整。
为进一步实现上述发明目的,所述的将数据点映射过程具体如下:
划分底层网格后,每个底层网格根据网格中心坐标和边长进行编码,编码规则是对每维坐标分别编码,每一维编码取网格中心坐标的该维数据除以边长向下取整,各维编码组合构成网格的编码;
新的时间戳下所包含的每个数据点根据网格的编码规则,将其坐标分别编码,将数据点加入到相应网格,即映射到相应的底层网格,完成数据点映射。
为进一步实现上述发明目的,所述划分底层网格过程具体如下:
根据预设的网格边长,将数据点所覆盖的空间划分成边长相等的若干个网格,为了降低内存消耗,并非维护所有网格,而是当有数据点映射到该网格时,才维护该网格,并将数据点存储在该网格内。
为进一步实现上述发明目的,所述构建层次网格索引树的具体过程为:
由丛机节点数量和当前滑动窗口内数据点数量得出每个丛机节点的平均负载量,根据负载缓冲阈值,计算出每个丛机节点可接受的负载区间;
由底层向上构建四叉树层次网格索引,从低一层网格向上一层网格合并,同时统计合并后网格的数据点数量,若数据点数量落在可接受的负载区间,给该网格做出标记;
如果上一层网格同样落在可接受的负载区间,上一层网格的标记覆盖下一层网格的标记,直到达到最高层,完成层次网格索引树的构建;
对层次网格索引树中所有网格按照层号和顺序号进行编号,使网格编号与丛机节点编号在后续的数据路由表中建立关联。
为进一步实现上述发明目的,所述层次网格索引树与数据路由表建立关联的具体过程为:
自顶层向下搜索遍历步骤3构建的层次网格索引树的同时统计标记的网格数量,
若搜索遍历到的网格为标记的网格,对每个带有标记的网格构建一个数据路由记录,停止向其孩子网格继续遍历;
若搜索遍历到的网格为未标记的网格,且其孩子网格均是未标记网格,对该网格构建路由记录,然后停止向下搜索遍历,
当标记的网格数量等于丛机节点数量时,则对每个遍历到的未标记网格构建一个数据路由记录,将其数据路由记录中的丛机节点编号标记为层次网格索引树中其兄弟网格所分配到的丛机节点编号,
当标记的网格数量少于丛机节点数量时,对于每个遍历到的未标记的网格,首先判断其数据点数量是否大于负载缓冲阈值,
如果大于,则对未标记网格的孩子网格自顶层向下创建数据路由记录并分配至新的丛机节点,
如果不大于,首先判断是否可以分配至其兄弟网格所在的丛机节点,否则,将其分配到一个新的丛机节点,直到不存在空的丛机节点,
层次网格索引树遍历结束,由数据路由记录组成的数据路由表构建完成,层次网格索引树与数据路由表通过网格编号建立了关联。
上述方法中负载调整的技术方案如下:
当分布式数据流的数据发生变化时,需要对层次网格索引树进行更新,即对分布式数据流中新到达的时间戳上的数据点,映射到数据点所在的底层网格,更新所在底层网格的数据点数量,同时对于滑动窗口滑出的过期时间戳上的数据点从底层网格中删除,同时也更新过期数据点所在底层网格的数据点数量,
此时,根据更新后的层次网格索引树和数据路由表更新每个丛机节点预计的负载量,然后根据步骤3得到的可接受的负载区间判断预计的负载是否均衡,
若均衡,则无需调整,
若不均衡,则从超载丛机节点中调整部分网格到低载丛机节点或正常丛机节点,以达到负载均衡。
为进一步实现上述发明目的,所述从超载丛机节点调整部分网格到低载丛机节点或正常丛机节点的过程为:
为保证数据分发是基于数据分布的,在负载调整过程中至少以一个底层网格进行调整,并且仅对新时间戳上的网格进行调整,
对所有丛机节点上的预计负载量进行排序,从最大负载量的丛机节点选择部分网格向不超载的丛机节点进行负载调整。
优选,最大负载量的丛机节点向最少负载量的丛机节点调整新时间戳上的网格。
为进一步实现上述发明目的,所述选择部分网格的具体过程为:
如果超载丛机节点的数据由多个网格组成,则从数据量最少的网格开始调整,选择一个网格调整到低载的丛机节点或处于可接受负载区间的丛机节点,
如果超载丛机节点由一个网格组成或者其中一个网格被调整后,当前丛机节点将处于低载而被调整后的其他丛机节点将处于超载,则将该网格由顶向下向低一层网格进行分割,
对该网格的低一层网格进行分组,选择使超载丛机节点负载满足可接受负载区间的网格调整到低载丛机节点,使得当前丛机节点处于正常状态,
所有丛机节点处于可接受负载区间,负载调整结束。
本发明提出一种分布式数据流系统中基于数据分布的负载均衡分发方法,该方法弥补了分布式数据流系统中基于数据分布的数据分发方法,同时解决了倾斜数据分布和流式数据分布突发变化下的负载均衡问题,提升分布式数据流计算系统的并行计算性能。
本发明提出的层次网格索引树与数据路由机制,有效管理、记录和跟踪分布式数据流系统上数据分发的实时情况,可帮助流式大数据分布式并行计算系统优化和改进拓扑结构设计。
附图说明
图1是本发明的分布式数据流中基于数据分布的负载均衡分发方法的流程图。
其中,步骤a为滑动窗口(window)往前滑动一个时间戳,ti表示第i个时间戳,
步骤b为构建或更新层次网格索引树,并对数据点进行映射,其中hn_i表示第n层第i个网格的编号,其中,h0为最顶层,
步骤c为更新数据路由表,将层次网格索引树与数据路由表建立关联,其中bolt1、bolt2及bolt3分别为丛机节点1-3,n1、n2、n3分别表示每个对应网格在所在时间戳上的数据量,
步骤d为数据分发。
图2是本发明的分布式数据流处理所针对的数据类型以及分布示意图。
其中,区域与分布式文件系统之间的箭头代表与突发热点事件有关的用户所产生的信息流,信息流存储于分布式文件系统中,每个区域中包含不同的突发热点事件,点的多少,代表热点事件的数量,深色点代表最近时间的热点事件,浅的代表较远时间的热点事件。
图3是本发明的分布式数据流数据分发方法执行负载调整的示意图。
表中编号1-3为丛机节点编号,单元格的阴影面积大小表示当前丛机节点滑动窗口内所包含数据量的多少,在时间戳ti到达时,丛机节点1预负载量超出了负载缓冲阈值,
其中,步骤a为判断丛机节点负载超载,
步骤b为分割网格层次索引树网格,
步骤c为查询网格层次索引树,
步骤d为调整部分网格。
具体实施方式
下面结合附图1-3与实施实例对本发明做进一步说明。
根据全球最大的社会化媒体专业传播公司wearesocial在2017年发布的数字报告,移动手机用户已达49.17亿,活跃的移动在线社交用户也已达25.49亿,并且这一数字仍在持续增长,实时数据正通过如此规模巨大的用户源源不断地产生,所产生的实时数据流具有很大的间接价值,如通过用户的签到数据分析可以为用户提供个性化的推荐服务,为企业带来直接收益等。
社交网络(socialnetworkingservices,sns)热点事件分析预测是当前热门的研究话题,突发热点事件的研究与发展更是具有重要的价值与深远意义,尤其是依附于移动社交网络媒体的突发热点事件预测与分析。用户往往每次发送带有位置的微博,该条微博会以数据流的形式经过网络传输到相应区域的服务器节点,通过对该微博来源所在区域的微博进行实时监控与分析就可以实现突发热点事件的分析预测。值得注意的一点是在用户发布的文本信息中往往会涉及到事件的地点信息,通过该地点信息结合地图也能够得出地点的具体位置,如经纬度坐标。
由于突发热点事件一般存在于特定的区域,根据其突发性,在同一时间内不同的区域可能会发生多个突发热点事件,如不同的城市出现车辆交通事故导致道路拥挤,涉及到的相关网络社交用户就此类事件进行传播,这在数据流的来源上就产生了不均匀分布。同时,根据突发热点事件规模的大小,数据流的规模也存在很大差异,比如12·31上海外滩踩踏事件与济南普通的交通事故相比就属于大规模的突发热点事件,在社交网络中表现出来就是有关上海外滩位置的微博数据激增明显,有关济南交通事故发生位置的微博数据激增不显著。当立足于宏观角度看突发热点事件时,所面对的便是数据分布不均匀并且突发变化明显的数据流,当对不同的突发热点事件按照相同的方式进行处理时(如分配处理每一突发事件的计算硬件资源等相等)就会导致不必要的资源浪费。同时,每个热点突发事件的地点一般高度明确,所包含的内容都紧密相关,即存在时空相关性,在分布式计算系统中对此类消息流进行分发时同时必须考虑区域的一致性。
现有技术在解决此类问题时,没有很好的结合数据流的时空相关性以及数据分布不均匀且变化明显的问题,不能对微博热点数据实现高效的跟踪,因此在处理该类问题时存在效率低下,分析结果实时性不强的缺陷。
下例结合突发热点事件的数据分流方式对本发明的方法说明。
实施例1
一种处理突发热点事件数据流负载均衡分发的方法。
如图1所示,标号a、b、c和d为分布式数据流中基于数据分布的负载均衡分发方法的先后顺序,a滑动窗口往前滑动一个时间戳,其中包含分布式热点突发事件数据流处理、热点突发事件数据点映射,b查询或创建网格索引树,其中包括构建包含热点突发事件数据点的层次网格索引树,c查询或调整数据路由表,其中包括层次网格索引树与数据路由表建立关联,d数据分发。
如图2所示,三个区域1、2、3分别由图1中的丛机节点bolt1、bolt2及bolt3进行实时分析与处理,此时,如图2步骤1所示,当前3个分别包含1个突发热点事件的区域由于新的突发热点事件出现变为了包含4个热点突发事件的3个区域,区域1的数据流量突然变大,导致数据流分布不均衡,正在对区域1进行突发热点事件实时分析的丛机节点1吞吐性能下降,突发热点事件1、4的实时性分析受到影响,此时需要根据数据分布进行调整,当前时间ti还未到达时,即图2步骤1之前处理步骤结合图1的数据分发方法先后顺序如下:
1)分布式热点突发事件数据流处理:图2所示的是突发热点事件的数据产生及存储过程,在不同区域的相关用户通过对所在区域的突发热点事件进行传播会产生一条数据,即数据点,该条数据包含文本内容、与该事件相关的位置信息点以及时间戳信息,并流向分布式文件系统进行存储。图1所示的滑动窗口(window)则包含了3个时间戳下的突发热点所有数据点,其数据点通过在分布式文件系统进行读取,每次向前滑动一个时间戳(该实例中一个时间戳为1小时间隔),即每次从分布式文件系统中读取一个时间戳下的所有突发热点事件数据点,其中ti为第i个时间戳;
2)热点突发事件数据点映射:
21)划分底层网格:预设网格边长,根据每个区域的范围,划分底层网格,然后对每个底层网格根据网格中心坐标和边长进行编码,其中,所述编码是对每维坐标分别编码,每一维编码取网格中心坐标的该维数据除以边长向下取整,各维编码组合构成网格的编码,然后,将数据点所在的区域即所覆盖的空间划分成边长相等的若干个网格,维护当前滑动窗口内存在数据点的网格;
22)数据点映射到底层网格:对每次到达的新时间戳下所包含的每个数据点根据网格的编码规则将其坐标分别编码,将数据点加入到相应网格,即映射到相应的底层网格,完成数据点映射;
3)构建包含热点突发事件数据点的层次网格索引树:由丛机节点数量和当前滑动窗口内热点突发事件所包含的数据点数量得出每个丛机节点的平均负载量,根据负载缓冲阈值给出每个丛机节点可接受的负载区间,本实例中从机节点数量为3;
由底层向上构建四叉树层次网格索引,从低一层网格向上一层网格合并,同时统计合并后网格的数据点数量,若数据点数量落在可接受的负载区间,给该网格做出标记;
若上一层网格落在可接受的负载区间,上一层网格的标记覆盖下一层网格的标记,直到达到最高层,完成层次网格索引树的构建,对所述层次网格索引树中所有网格按照层号和顺序号进行编号,即得网格编号hn_i表示第n层第i个网格;
4)层次网格索引树与数据路由表建立关联:遍历所述层次网格索引树建立数据路由表,如图3所示,丛机节点1、2、3分别包含网格编号为h1_1、h1_2、h1_3的网格,由于区域4并不存在,因此网格h1_4暂不维护,层次网格索引树与数据路由表通过网格编号建立关联,通过数据路由记录中的网格编号对层次网格索引树中的网格数据即热点突发事件跟踪;
5)数据分发:根据数据路由表中的数据路由记录与层次网格索引树中的数据的对应关系,得到每个丛机节点所包含的网格,具体为将h1_1、h1_2、h1_3网格中所包含的热点数据分别发送到丛机节点1-3。
实施例2
一种处理突发热点事件数据流负载均衡分发的方法在负载不均衡时的调整方法。
当时间戳ti所包含的数据点到达时,出现丛机节点负载不均衡,
如图2中步骤1之后负载判断及调整的处理步骤如下:
对时间戳ti中所包含的热点事件数据点同样应用以上步骤1)~4),针对步骤5)由于当前区域1突发热点事件4的出现,滑动窗口内包含编号为h1_1网格的丛机节点数据点数量激增,导致丛机节点1的预负载量超出负载缓冲阈值,如图3所示在ti时刻按照当前的数据路由记录分发方法会出现丛机节点1负载过大的情况,此时需要对丛机节点1中所包含的网格进行调整,步骤如下:
1)更新层次网格索引树:过期时间戳ti-3的数据从层次网格索引树的底层网格删除,同时层次网格索引树非底层网格的数据点数据量,针对时间戳ti的数据,也对层次网格索引树更新;
2)判断丛机节点负载状态:根据当前的数据路由表计算3个丛机节点的平均负载量,丛机节点1的负载区间超出负载缓冲阈值,对丛机节点1中的网格h1_1进行调整,由于当前丛机节点只包含一个网格,因此对网格h1_1进行分裂,如图3中步骤b、c所示,通过查询层次网格索引树,将h1_1分裂为h2_1、h2_2、h2_h3、h2_4四个网格,由于网格h2_4滑动窗口内没有数据点,此时不对网格h2_4进行维护;
3)在数据路由表中调整网格到其他丛机节点:将h2_1、h2_2、h2_h3根据最新时间戳ti上所包含的数据点数量进行排序,对丛机节点根据预负载量进行排序,得到当前丛机节点3的负载量最少,因此,将网格h2_1、h2_2、h2_h3中的部分数据调整到丛机节点3,在本实例中将网格h2_1调整到丛机节点3中,即,新时间戳ti上所包含的数据点被调整到丛机节点3,在数据路由表中新增与网格h2_1、h2_2、h2_3调整相关的数据路由记录;
4)数据分发:根据最新的数据路由表记录,对热点突发事件数据向各个丛机节点进行分发,调整后的3个丛机节点处于可接受负载区间。
实施例1和实施例2的方法根据突发热点事件的数据分布对其数据流结合层次网格索引树进行划分,通过数据路由实现负载均衡分发方法,在满足将同一区域的突发热点事件没有随机分发到其他丛机节点的同时,又保证了各个丛机节点的负载均衡,对突发热点事件的实时性分析提供了技术保障。
流式分布式并行处理框架已成为目前应对大流量、低延时数据流处理任务的一种有效解决方案,然而现有数据分组处理方式没有考虑基于数据分布的分发方法,同时由于数据的倾斜分布及数据流本身的实时、动态和数据规模不可预知等特性,使得数据流分布式并行处理系统存在持续且动态负载不均衡现象,这会造成系统时效性降低、硬件资源浪费等诸多问题。本发明的该数据分发方法既考虑基于数据分布进行数据分组,又利用层次索引结构和数据路由管理实现了跨层的网格数据分发,解决了负载均衡问题,同时实现了对分发数据的记录和追踪管理,对于提升分布式数据流系统的并行处理效率和优化流式系统的拓扑结构设计都起到了重要的推进作用。