CN112667170A - 一种面向滑动窗口数据分析的Spark数据缓存方法 - Google Patents

一种面向滑动窗口数据分析的Spark数据缓存方法 Download PDF

Info

Publication number
CN112667170A
CN112667170A CN202110036036.5A CN202110036036A CN112667170A CN 112667170 A CN112667170 A CN 112667170A CN 202110036036 A CN202110036036 A CN 202110036036A CN 112667170 A CN112667170 A CN 112667170A
Authority
CN
China
Prior art keywords
window
data
exe
time
state
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
CN202110036036.5A
Other languages
English (en)
Other versions
CN112667170B (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.)
Beijing University of Technology
Original Assignee
Beijing University of Technology
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 Beijing University of Technology filed Critical Beijing University of Technology
Priority to CN202110036036.5A priority Critical patent/CN112667170B/zh
Publication of CN112667170A publication Critical patent/CN112667170A/zh
Application granted granted Critical
Publication of CN112667170B publication Critical patent/CN112667170B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种面向滑动窗口数据分析的Spark数据缓存方法.主要分为六个步骤:初始化,选取待预取的滑动窗口,选取数据块的放置位置,判断窗口是否满足时间条件,执行预取操作和周期性执行.本发明利用启发式搜索策略选取待预取窗口和数据块的放置方案,从空间和时间角度保证数据预取的有效性和可靠性,利用预取技术提高滑动窗口数据分析的计算效率。

Description

一种面向滑动窗口数据分析的Spark数据缓存方法
技术领域
本发明属于大数据内存计算领域,具体涉及大数据的数据缓存技术。
背景技术
Apache Spark是分布式内存计算平台最为典型的代表,已被产业界和学术界广泛认可。Spark将频繁使用的数据缓存至内存中,计算过程中不需要再从存储系统读写数据,从而避免了大量的磁盘I/O操作,因此既有Spark系统适用于大数据迭代计算及交互式计算。
滑动窗口数据分析(Sliding Window Analysis)是数据分析中比较常见的模式,广泛应用在流量统计,数据分析及时间序列预测等领域,如网站流量统计,基因序列分析等等。滑动窗口是指在连续的离线数据集上按序将数据划分为固定长度、可重叠的窗口数据,并对各窗口数据执行相同的处理逻辑。
然而滑动窗口数据分析很难受益于Spark的数据缓存技术。一方面,从数据使用模式上看,滑动窗口数据分析中,每个窗口的输入数据仅被处理一次,若不能在窗口数据处理前将其读入内存,则难以提升窗口数据的处理效率;另一方面,既有Spark系统中尚未提供有效的缓存数据预取方法,由于用户缺乏对滑动窗口分析负载的系统执行行为及资源需求的了解,难以准确决策何时将窗口数据读入数据缓存,从而导致数据预取滞后于数据处理,或是数据过度预取抢占当前窗口数据处理所需的内存资源,无法保障负载的正常运行。
发明内容
针对上述问题,本文提出了一种面向滑动窗口数据分析的Spark数据缓存方法。该方法的核心思想是将后续窗口数据的缓存与前继窗口的处理并发执行,在整个数据处理的过程中,降低数据读取的串行占比,从而提高窗口的执行效率。
本发明采用启发式优化工具,针对待执行的滑动窗口,根据其包含的数据块总数和已缓存的数据块数量计算权值,按权值从大到小的顺序,依次搜索窗口及其数据块的放置位置,每个窗口都必须同时满足时间和空间条件,最后利用预取技术实现数据的缓存。本发明所提出的缓存方法,在给定的时空约束下,提高窗口数据块的缓存命中率,并降低数据缓存对系统性能的影响,从而从整体上提高滑动窗口应用的执行效率。
本方法所述的面向滑动窗口数据分析的Spark数据缓存方法主要分为六个步骤:初始化,选取待预取的滑动窗口,选取数据块的放置位置,判断窗口是否满足时间条件,执行预取操作和周期性执行。本方法中的基本参数包括:窗口权重系数μ,运行时内存规模膨胀系数α,窗口间载入时间比例θ和窗口间计算时间比例γ。μ一般取值在1.0~2.0之间,α一般取值1.0~1.5之间,θ一般取值在0.5~1.5之间,γ取值一般在0.5~1.5之间。
上述方法在计算机上按照以下步骤实现:
(1)初始化
1.1)Spark集群中,计算节点的集合表示为Node={node1,node2,...,nodeN},N表示的是计算节点的数量。任务执行器的集合表示为Exe={exe1,exe2,...,exen},n表示的是任务执行器的数量。
1.2)滑动窗口应用的输入数据集D={de1,de2,...,deq),其中dei∈D表示编号为i的数据元素,q表示数据元素的个数。每个数据元素包含的数据属性集表示为DP=(dp1,dp2,...,dph),其中h表示数据属性的总数。任意数据元素dei∈D可表示为dei=(dvi1,dvi2,...,dvip),其中dvij表示数据元素dei在数据项dpj上的取值。存在属性dpj∈DS,数据集D在dsj上满足偏序关系,即dv1j<dv2j<…<dvqj
1.3)滑动窗口数据分析所包含的窗口集合表示为W={w1,w2,...,wM},其中M表示的是窗口的总数。窗口wi∈W处理的数据集表示为dwi={desi,desi+1,...,deei},其中si和ei分别表示数据元素开始和结束的编号。数据块是Spark存储管理模块中最小的存储单元,由若干连续的数据元素组成。Spark默认分区配置或用户自定义分区设置定义为函数P(dwi),基于此函数规则,窗口wi的数据集被划分为数据块集合dsi={dbi1,dbi2,...,dbim},其中m表示的是数据块的总数。
1.4)根据运行状态的不同,滑动窗口应用中的窗口分为三类:处于运行态的窗口集合
Figure BDA0002894342460000021
处于待执行态的窗口集合
Figure BDA0002894342460000022
以及其他状态。
(2)选取待预取的滑动窗口
2.1)创建待预取集合
Figure BDA0002894342460000035
创建候选集合Can=Wpending
2.2)判断候选集合Can是否为空,如果为空则跳转步骤(5),否则继续执行步骤(2.3)。
2.3)根据公式(1)计算候选集合Can中每个窗口的权值Weight={weight1,weight2,...,weightg},其中weighti∈Weight表示的是窗口wi的权值,g表示的是候选集合中窗口的数量。公式中osi∈dsi表示的是因窗口重叠而缓存的数据块集合,系数μ用于调整|dsi|与|osi|之间权重比例。
weighti=|dsi|+μ·|osi| (1)
2.4)根据每个窗口的权值为集合Weight,从预取候选集合Can中选取权值最大的窗口wp作为待预取窗口,并将wp从候选集合Can中移除。
(3)选取数据块的放置位置
3.1)窗口wp中所有数据块的放置位置被定义为状态s=((dbp1,exe1),(dbp2,exe2),...,(dbpm,exen)),生成窗口wp的所有状态集合S={s1,s2,...,sv},其中v表示的是状态的总数。
3.2)遍历状态集合中的每一种状态sm∈S,过滤其中不满足空间条件的状态。
3.2.1)基于状态sm∈S,窗口wi∈W的输入数据集缓存在任务执行器上所消耗的内存规模为
Figure BDA0002894342460000031
其中
Figure BDA0002894342460000032
表示任务执行器exej∈Exe上因数据缓存而消耗的内存规模。根据公式
(2)计算窗口wp的数据集在任务执行器上消耗的内存规模为
Figure BDA0002894342460000033
其中size(dbpk)用于估计数据块dbpk的缓存大小。
Figure BDA0002894342460000034
3.2.2)合集群中任务执行器的可用内存总量为集合
Figure BDA0002894342460000036
其中
Figure BDA0002894342460000037
代表任务执行器exej∈Exe的可用内存总量。公式(3)展示了可用内存总量的计算方法,其中
Figure BDA0002894342460000038
代表任务执行器exej∈Exe所申请的最大内存规模,
Figure BDA0002894342460000049
表示的是除了运行态窗口和窗口wp外,其他状态的窗口在任务执行器exej∈Exe缓存的数据规模。
Figure BDA0002894342460000041
3.2.3)根据公式(4)计算预取后每个任务执行器剩余的内存规模
Figure BDA0002894342460000042
Figure BDA0002894342460000043
其中
Figure BDA0002894342460000044
表示的是窗口wp缓存在任务执行器exej∈Exe上的输入数据规模,
Figure BDA0002894342460000045
表示的是运行态窗口wr∈Wrunning缓存在任务执行器exej∈Exe上的输入数据规模,膨胀系数α表示的是窗口在运行过程中所消耗的最大内存规模与输入数据缓存规模的比例。
Figure BDA0002894342460000046
3.2.4)根据公式(5)判断每一个数据块放置方案sm∈S是否满足空间条件,如果不满足空间条件,执行步骤(3.2.5)
Figure BDA00028943424600000410
3.2.5)将不满足空间条件的状态从集合S中移除。
3.3)判断集合S是否为空,如果为空则跳转执行步骤(2.2),否则继续执行步骤(3.4)。
3.4)根据公式(6)计算集合S中每种状态的代价值Cost={cost1,cost2,...,costu},其中costm表示状态sm∈S的代价,u表示的过滤后集合S的数量。函数Loc用于表示数据块是否放置于本地的任务执行器。对于状态sm∈S,如果数据块dbk的放置位置是本地任务执行器,那么Loc(sm,dbk)的值为0,否则为1。
Figure BDA0002894342460000047
3.5)基于代价集合Cost,从状态集合S中选取代价最小的状态sp用于描述每个数据块的放置位置。
(4)判断窗口是否满足时间条件
4.1)计算待预取窗口wp的预取时间
4.1.1)基于数据块放置方案sp,根据公式(7)计算任务执行器exej∈Exe上数据块dbpk的预取时间
Figure BDA0002894342460000048
其中rk表示预取单位数据量所耗费的时间。
Figure BDA00028943424600000513
4.1.2)每个任务执行器串行载入数据块,根据公式(8)计算每个任务执行器的载入时间
Figure BDA00028943424600000514
其中
Figure BDA00028943424600000515
代表任务执行器exej∈Exe预取其对应数据块的总时间。
Figure BDA0002894342460000051
4.1.3)根据公式(9)计算窗口wp的预取时间tp
Figure BDA0002894342460000052
4.2)计算运行态窗口的剩余执行时间
(4.2.1)对于运行态窗口wr∈Wrunning,根据公式(10)估计剩余数据的载入时间
Figure BDA0002894342460000053
其中θ表示为窗口wr与wr-1的载入时间的比例,
Figure BDA0002894342460000054
表示为窗口wr-1的载入时间,如果窗口wr-1不存在则试运行小数据集观测参数
Figure BDA0002894342460000055
Figure BDA0002894342460000056
(4.2.2)对于运行态窗口wr∈Wrunning,根据公式(11)估计剩余计算时间
Figure BDA0002894342460000057
其中γ表示为窗口wr与wr-1的计算时间的比例,
Figure BDA0002894342460000058
表示为窗口wr已完成的计算时间,
Figure BDA0002894342460000059
表示为窗口wr-1的计算时间。如果窗口wr-1不存在则试运行小数据集观测参数
Figure BDA00028943424600000510
Figure BDA00028943424600000511
(4.2.3)对于运行态窗口wr∈Wrunning,根据公式(12)估计其剩余的执行时间rtr
Figure BDA00028943424600000512
(4.2.4)所有运行态窗口的剩余执行时间表示为集合RT={rt1,rt2,...,rtu},其中u表示的是运行态窗口的数量。从所有运行态窗口Wrunning中选取的最短的剩余执行时间rts∈RT。
4.3)基于数据块放置方案sp,判断待预取窗口的预取时间tp是否小于运行态窗口的剩余执行时间rtS,如果预取时间小于剩余执行时间,则执行步骤(4.4),否则执行步骤(2.2)。
4.4)将二元组(wp,sp)添加至待预取集合P,跳转执行步骤(2.2)。
(5)执行预取操作
5.1)判断待预取窗口集合P是否为空,如果为空则执行步骤(6),否则继续执行步骤(5.2)。
5.2)从预取窗口集合P中,按照添加的先后顺序,选取二元组(wp,sp),并将其从预取窗口集合P中移除。
5.3)预取窗口wp对应的输入数据集,按照方案sp缓存数据块,预取完毕后执行步骤(5.1)。
(6)周期性执行
6.1)等待运行态窗口执行完毕后,更新集合Wrunning和Wpending
6.2)判断待执行窗口集合Wpending是否为空,如果不为空则跳转执行步骤(2),否则结束本缓存方法。
为了实现上述方法,本发明在Spark内核模块中新增SlidingWindowRDD用于抽象描述滑动窗口的输入数据集,在步骤(1)中初始化待执行的滑动窗口。SlidingWindowRDD提供了获取窗口数据块总数和已缓存数据块数量的接口,在步骤(2)中计算滑动窗口的权值。在主节点新增预取管理组件,获取并监听关于节点和任务执行器的情况,在步骤(3)中寻找满足空间条件的数据块放置方案,在步骤(4)判断窗口是否满足时间条件。在集群的各个计算机点上新增预取器,在步骤(5)执行具体的预取操作,在步骤(6)中周期性运行窗口缓存方法,直到不存在待执行窗口时结束全部流程。
附图说明
图1为本发明所依附的Spark系统的部署图。
图2为本发明基于Spark计算框架中新增模块及其交互关系图。
图3为本发明方法的总体流程图。
图4为选取待预取窗口的流程图。
图5为选取数据块的放置位置的流程图。
图6为判断数据块放置方案是否满足空间条件的流程图。
图7为判断窗口是否满足时间条件的流程图。
图8为执行预取操作的流程图。
图9为周期性执行的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。
本发明提出的面向滑动窗口数据分析的Spark数据缓存方法,通过新增和修改Spark内核组件实现。图1是本方法所依附的Spark系统部署图,该系统由一个用户节点(Client),主节点(Master)和多个计算节点(Worker)构成,节点之间通过网络实现相互连接。图2是本发明基于Spark计算框架中新增模块及其交互关系图。本发明所提出的缓存方法依赖以下核心组件:滑动窗口代理,预取控制模块和预取模块。其中滑动窗口代理面向外部用户提供滑动窗口数据分析的计算接口,向内部预取模块提供数据预取接口。预取控制模块位于主节点,其核心功能是制定预取策略,包括预取窗口和数据块位置的选取;除此之外,预取控制模块也负责发送预取命令和收集预取结果。预取模块位于每一个计算节点上,其核心功能是实现窗口数据的预取,同时监控和收集任务执行器的资源情况。
下面结合图3发明内容总流程说明本发明的具体实施方法。在本实施方法中,基本的参数设置如下:窗口权重系数μ为1.5,运行时内存规模膨胀系数α为1.1,窗口载入时间比例θ和窗口计算时间比例γ分别为1.0。本实施方法可分为以下步骤:
(1)初始化
1.1)Spark集群中,计算节点的集合表示为Node={node1,node2,node3},任务执行器的集合表示为Exe={exe1,exe2,exe3}。
1.2)滑动窗口应用的输入数据集D={de1,de2,...,de1023},每个数据元素包括两种属性,分别为时间属性(time)和文本属性(text)。任意数据元素可以表示为dei=(dvtime-i,dvtext-i),数据集在时间属性上满足偏序排列,即由远及近的顺序排列。
1.3)滑动窗口的集合表示为W={w0,w1,w2},窗口w0所处理的数据集表示为dw1={de1,de2,...,de640},窗口w1所处理的数据集表示为dwi={de641,de642,...,de1024},窗口w2所处理的数据集表示为dw2={de1025,de1026,...,de1664}。数据块是Spark存储管理模块中最小的存储单元,窗口w0的数据块表示为ds0={db01,db02,db03},窗口w1的数据块表示为ds1={db11,db12,db13},窗口w2的数据块表示为ds2={db21,db22,db23}。
1.4)根据运行状态的不同,滑动窗口应用中的窗口分为三类:处于运行态的窗口集合Wrunning={w0},处于待执行态的窗口集合Wpending={w1,w2}。
(2)选取待预取的滑动窗口
2.1)创建待预取窗口集合
Figure BDA0002894342460000081
创建预取候选集合Can={w1,w2}。
2.2)Can集合不为空,继续执行步骤(2.3)。
2.3)计算集合Can中每个窗口的权值,窗口w1总共包含3个数据块,2个重叠数据块,权值weight1为6。窗口w2总共包含3个数据块,0个重叠数据块,权值weight2为3。
2.4)集合Can中窗口w1的权值最高,因此选取窗口w1作为待预取窗口。
(3)选取数据块的放置位置。
3.1)窗口w1中所有数据块的放置位置被定义为状态((db11,exe1),(db12,exe2),(db13,exe3)),生成所有状态的集合S={s1,s2,...,s27}。
3.2)遍历状态集合中的每一种状态sm∈S,过滤其中不满足空间条件的状态。
3.2.1)例如状态s1=((db11,exe1),(db12,exe2),(db13,exe3)),窗口w1的输入数据集缓存在任务执行器上消耗的内存规模为FP1={5,5,5},其中每个数据块的大小均为5。
3.2.2)集群中任务执行器所申请的最大内存容量为集合Max={15,15,15},任务执行器上其他状态的窗口缓存的数据规模为Cached={5,5,5},集群中各个任务执行器的可用内存总量为集合Total={10,10,10}。
3.2.3)窗口w1在各个任务执行器上运行时消耗的最大内存规模为集合{5.5,5.5,5.5},运行态窗口w0在各个任务执行器上运行时消耗的最大内存规模为集合{4.4,4.4,4.4},因此预取窗口w1后剩余的可用内存规模表示为集合Rev={0.1,0.1,0.1}。
3.2.4)在预取窗口w1后剩余的内存规模均大于零。
3.3)集合S不为空,继续执行步骤(3.4)。
3.4)计算集合中每种状态的代价值,表示为集合Cost={0}。数据块db1存储在节点node1而缓存在本地任务执行器exe1,数据块db2存储在节点node2而缓存在本地任务执行器exe2,数据块db3存储在节点node3而缓存在本地任务执行器exe3
3.5)选取代价值最小的窗口w1用于描述所有数据块的放置位置。
(4)判断窗口是否满足时间条件。
4.1)计算待预取窗口的预取时间(单位:秒)
4.1.1)基于数据块放置方案s1,各个任务执行器预取单位数据量的时间表示为R={1.0,1.2,0.9},那么数据块的预取时间表示为tdb={5.0,6.0,4.5}。
4.1.2)各个任务执行器串行预取数据块,任务执行器上的总预取时间表示为texe={5.0,6.0,4.5}。
4.1.3)窗口w1的预取时间为6.0。
4.2)计算运行态窗口的剩余执行时间。
4.2.1)运行态窗口w0已完成数据载入过程,其剩余数据的载入时间为0。
4.2.2)估计运行态窗口w0的剩余计算时间,由于窗口w0不存在前置窗口,因此试运行小数据集观测
Figure BDA0002894342460000091
为15秒,而窗口w0已完成的计算时间为8秒,因此运行态窗口的剩余计算时间为7秒。
4.2.3)窗口w0的剩余执行时间为0+7=7秒。
4.2.4)对于所有处于运行态窗口来说,其最短的剩余计算时间为7秒。
4.3)基于数据块放置方案s1,待预取窗口w1的预取时间小于运行态窗口w0的剩余执行时间,因此窗口w1满足时间条件。
4.4)将(w1,s1)添加至待预取集合P,重复执行步骤(2.2),直至集合Can为空。
(5)执行预取操作。
5.1)待预取集合P={(w1,s1)}不为空,继续执行步骤(5.2)。
5.2)从待预取集合P中,按照添加的先后顺序,选取二元组(w1,s1),并将其从集合P中移除,此时集合
Figure BDA0002894342460000102
5.3)预取窗口w1对应的数据集,按照方案s1缓存数据块,预取完毕后检查集合P为空集,执行步骤(6)。
(6)周期性执行。
6.1)等待窗口w0运行完毕,更新集合Wrunning={w1}和Wpending={w2}。
6.2)Wpending不为空,重新从步骤(2)开始执行上述步骤,直至Wpending为空,结束窗口预取方法。
本发明基于Spark计算框架进行了实现(以下简称SW-Spark),并将所实现的系统与原生Spark(以下简称O-Spark)在执行滑动窗口应用时进行了性能比较测试。测试结果表明,与既有Spark系统相比,本发明的面向滑动窗口应用的Spark数据缓存技术能够显著降低部分窗口的执行时间,从而加速滑动窗口应用的执行。
性能测试以执行时间为指标,包括各个窗口的执行时间和应用的总执行时间。实验中使用的平台由6台虚拟机(Virtual Machine,VM),每个VM分配四核心CPU以及16GB内存。测试选取本文选取的三种负载包括移动平均法、分时段词频统计和分时段排序,每个负载均包含10个滑动窗口,窗口输入数据规模随时间序列变化,窗口之间的重叠数据规模大致为窗口规模的50%。实验采用真实Tweet数据集,数据集采集了2019年3月份前10天的时间序列数据,数据集的规模如表2所示。
表1测试环境配置
Figure BDA0002894342460000101
表2数据集数据规模
时间范围 2019.4.1 2019.4.2 2019.4.3 2019.4.4 2019.4.5
数据规模(GB) 11.01 8.71 10.17 19.00 18.06
时间范围 2019.4.6 2019.4.7 2019.4.8 2019.4.9 2019.4.10
数据规模(GB) 18.33 19.63 12.40 18.56 18.82
以下是不同负载的性能观测结果:
(1)负载为移动平均法的性能观测。
表3负载为移动平均法的性能观测
Figure BDA0002894342460000111
从表3中观察到,SW-Spark相比于O-Spark,滑动窗口应用(w1~w10)的总时间减少了21.80%,其中w2,w3,w5,w7,w8,w10这六个滑动窗口的执行时间明显缩短,分别减少32.4%,36.4%,55.6%,38.5%,50%和34.5%。w1,w6,w9这三个窗口的执行时间略微延长,这是由于数据预取对系统性能产了有限的负面影响。
(2)负载为分时段词频统计的性能观测。
表4。负载为分时段词频统计的性能观测。
Figure BDA0002894342460000112
从表4中观察到,SW-Spark相比于O-Spark,滑动窗口应用(w1~w10)的总时间减少了16.70%,其中w2,w3,w5,w6,w8,w10这六个滑动窗口的执行时间明显缩短,分别减少21.1%,39.6%,37.0%,29.1%,41.7%和22.2%。w1,w4,w7这三个窗口的执行时间略微延长,这是由于数据预取对系统性能产了有限的负面影响。
(3)负载为分时段排序的性能观测。
表5负载为分时段排序的性能观测
Figure BDA0002894342460000121
从表5中观察到,SW-Spark相比于O-Spark,滑动窗口应用(w1~w10)的总时间减少了10.10%,其中w2,w3,w5,w8这四个滑动窗口的执行时间明显缩短,分别减少29.3%,30.9%,33.9%和35.3%。w1,w4,w6这三个窗口的执行时间略微延长,这是由于数据预取对系统性能产了有限的负面影响。
实验表明,在相同实验环境下,本方法提出的Spark缓存技术能够有效减少滑动窗口应用的执行时间。当选取不同类型的负载时,由于负载的计算特征可能不同,使得数据预取所减少的载入时间可能不同,因此性能提升的幅度存在差异,一般在10%~25%之间。当负载对内存资源敏感时,在有限的内存资源下,本发明的缓存技术将减少数据预取的频数,降低预取本身对系统性能的负面影响,从而使滑动窗口应用能够以更快的速度运行,保证应用具有较高的执行效率。
最后应说明的是:以上示例仅用以说明本发明而并非限制本发明所描述的技术,而一切不脱离发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

Claims (1)

1.一种面向滑动窗口数据分析的Spark数据缓存方法,其特征在于,分为六个步骤:初始化,选取待预取的滑动窗口,选取数据块的放置位置,判断窗口是否满足时间条件,执行预取操作和周期性执行;参数包括:窗口权重系数μ,运行时内存规模膨胀系数α,子数据集与窗口输入数据集的规模比例δ;参数μ的取值为1.5,α取值为1.5,δ取值为0.01;
上述方法在计算机上按照以下步骤实现:
(1)初始化
1.1)Spark集群中,计算节点的集合表示为Node={node1,node2,...,nodeN},N表示的是计算节点的数量;任务执行器的集合表示为Exe={exe1,exe2,...,exen},n表示的是任务执行器的数量;
1.2)滑动窗口应用的输入数据集D={de1,de2,...,deq),其中dei∈D表示编号为i的数据元素,q表示数据元素的个数;每个数据元素包含的数据属性集合表示为DP=(dp1,dp2,...,dph),其中h表示数据属性的总数;任意数据元素dei∈D可表示为dei=(dvi1,dvi2,...,dvip),其中dvij表示数据元素dei在数据项dpj上的取值;存在编号为j的属性dpj∈DP,数据集D在属性dpj上满足偏序关系,即dv1j<dv2j<…<dvqj
1.3)滑动窗口数据分析所包含的窗口集合表示为W={w1,w2,...,wM},其中M表示的是窗口的总数;窗口wi∈W处理的数据集合表示为dwi={desi,desi+1,...,deei},其中si和ei分别表示数据元素开始和结束的编号;数据块是Spark存储管理模块中最小的存储单元,由若干连续的数据元素组成;Spark默认分区配置或用户自定义分区设置定义为函数P(dwi),基于此函数规则,窗口wi的数据集被划分为数据块集合dsi={dbi1,dbi2,...,dbim},其中m表示的是数据块的总数;
1.4)根据运行状态的不同,滑动窗口应用中的窗口分为三类:处于运行态的窗口集合
Figure FDA0002894342450000011
处于待执行态的窗口集合
Figure FDA0002894342450000012
以及其他状态;
(2)选取待预取的滑动窗口
2.1)创建待预取集合
Figure FDA0002894342450000013
创建候选集合Can=Wpending
2.2)判断候选集合Can是否为空,如果为空则跳转步骤(5),否则继续执行步骤(2.3);
2.3)根据公式(1)计算候选集合Can中每个窗口的权值Weight={weight1,weight2,...,weightg},其中weighti∈Weight表示的是窗口wi的权值,g表示的是候选集合中窗口的数量;公式中osi∈dsi表示的是因窗口重叠而缓存的数据块集合,系数μ用于调整|dsi|与|osi|之间权重比例;
weighti=|dsi|+μ·|osi| (1)
2.4)根据每个窗口的权值为集合Weight,从预取候选集合Can中选取权值最大的窗口wp作为待预取窗口,并将wp从候选集合Can中移除;
(3)选取数据块的放置位置
3.1)窗口wp中所有数据块的放置位置被定义为状态s=((dbp1,exe1),(dbp2,exe2),...,(dbpm,exen)),生成窗口wp的所有状态集合S={s1,s2,...,sv},其中v表示的是状态的总数;
3.2)遍历状态集合中的每一种状态sm∈S,过滤其中窗口数据内存规模需求无法满足的状态;
3.2.1)基于状态sm∈S,窗口wi∈W的输入数据集缓存在任务执行器上所消耗的内存规模为
Figure FDA0002894342450000021
其中
Figure FDA0002894342450000022
表示任务执行器exej∈Exe上因数据缓存而消耗的内存规模;根据公式(2)计算窗口wp的数据集在任务执行器上消耗的内存规模为
Figure FDA0002894342450000023
其中size(dbpk)用于估计数据块dbpk的缓存大小;
Figure FDA0002894342450000024
3.2.2)合集群中任务执行器的可用内存总量为集合
Figure FDA0002894342450000025
其中
Figure FDA0002894342450000026
代表任务执行器exej∈Exe的可用内存总量;公式(3)展示了可用内存总量的计算方法,其中
Figure FDA0002894342450000027
代表任务执行器exej∈Exe所申请的最大内存规模,
Figure FDA0002894342450000028
表示的是除了运行态窗口和窗口wp外,其他状态的窗口在任务执行器exej∈Exe缓存的数据规模;
Figure FDA0002894342450000031
3.2.3)根据公式(4)计算预取后每个任务执行器剩余的内存规模
Figure FDA0002894342450000032
Figure FDA0002894342450000033
其中
Figure FDA0002894342450000034
表示的是窗口wp缓存在任务执行器exej∈Exe上的输入数据规模,
Figure FDA0002894342450000035
表示的是运行态窗口wr∈Wrunning缓存在任务执行器exej∈Exe上的输入数据规模,膨胀系数α表示的是窗口在运行过程中所消耗的最大内存规模与输入数据缓存规模的比例;
Figure FDA0002894342450000036
3.2.4)根据公式(5)判断每一个数据块放置方案sm∈S是否满足空间条件,如果不满足空间条件,执行步骤(3.2.5);
Figure FDA0002894342450000037
3.2.5)将不满足空间条件的状态从集合S中移除;
3.3)判断集合S是否为空,如果为空则跳转执行步骤(2.2),否则继续执行步骤(3.4);
3.4)根据公式(6)计算集合S中每种状态的代价值Cost={cost1,cost2,...,costu},其中costm表示状态sm∈S的代价,u表示的过滤后集合S的数量;函数Loc用于表示数据块是否放置于本地的任务执行器;对于状态sm∈S,如果数据块dbk的放置位置是本地任务执行器,那么Loc(sm,dbk)的值为0,否则为1;
Figure FDA0002894342450000038
3.5)基于代价集合Cost,从状态集合S中选取代价最小的状态sp用于描述每个数据块的放置位置;
(4)判断窗口是否满足时间条件
4.1)计算待预取窗口wp的预取时间
4.1.1)基于数据块放置方案sp,根据公式(7)计算任务执行器exej∈Exe上数据块dbpk的预取时间
Figure FDA0002894342450000039
其中rk表示预取单位数据量所耗费的时间;
Figure FDA0002894342450000041
4.1.2)每个任务执行器串行载入数据块,根据公式(8)计算每个任务执行器的载入时间
Figure FDA0002894342450000042
其中
Figure FDA0002894342450000043
代表任务执行器exej∈Exe预取其对应数据块的总时间;
Figure FDA0002894342450000044
4.1.3)根据公式(9)计算窗口wp的预取时间tp
Figure FDA0002894342450000045
4.2)计算运行态窗口的剩余执行时间
(4.2.1)对于运行态窗口wr∈Wrunning,如果r>1且窗口wr-1的输入数据已全部载入,根据公式(10)估计剩余数据的载入时间
Figure FDA0002894342450000046
其中θ表示为窗口wr剩余输入数据的规模与wr-1输入数据规模的比例,
Figure FDA0002894342450000047
表示为窗口wr-1的载入时间;如果r为1或wr-1并未运行完毕,那么从窗口wr的输入数据集中随机抽取规模比例为δ的子数据集,此时系数θ表示为
Figure FDA0002894342450000048
运行并观测子数据集的载入时间
Figure FDA0002894342450000049
利用公式(10)估计剩余数据的载入时间;
Figure FDA00028943424500000410
(4.2.2)对于运行态窗口wr∈Wrunning,如果r>1且窗口wr-1已计算完毕,根据公式(11)估计剩余计算时间
Figure FDA00028943424500000411
其中γ表示为窗口wr输入数据规模与wr-1输入数据规模的比例,
Figure FDA00028943424500000412
表示为窗口wr已完成的计算时间,
Figure FDA00028943424500000413
表示为窗口wr-1的计算时间;如果r为1或者wr-1并未运行完毕,从窗口wr的输入数据集中抽取规模比例为δ的子数据集,此时系数γ表示为
Figure FDA00028943424500000414
运行并观测子数据集的计算时间
Figure FDA00028943424500000415
此时
Figure FDA00028943424500000416
的值为0,利用公式(11)估计剩余的计算时间;
Figure FDA00028943424500000417
(4.2.3)对于运行态窗口wr∈Wrunning,根据公式(12)估计其剩余的执行时间rtr
Figure FDA00028943424500000418
(4.2.4)所有运行态窗口的剩余执行时间表示为集合RT={rt1,rt2,...,rtu},其中u表示的是运行态窗口的数量;从所有运行态窗口Wrunning中选取的最短的剩余执行时间rts∈RT;
4.3)基于数据块放置方案sp,判断待预取窗口的预取时间tp是否小于运行态窗口的剩余执行时间rts,如果预取时间小于剩余执行时间,则执行步骤(4.4),否则执行步骤(2.2);
4.4)将二元组(wp,sp)添加至待预取集合P,跳转执行步骤(2.2);
(5)执行预取操作
5.1)判断待预取窗口集合P是否为空,如果为空则执行步骤(6),否则继续执行步骤(5.2);
5.2)从预取窗口集合P中,按照添加的先后顺序,选取二元组(wp,sp),并将其从预取窗口集合P中移除;
5.3)预取窗口wp对应的输入数据集,按照方案sp缓存数据块,预取完毕后执行步骤(5.1);
(6)周期性执行
6.1)等待运行态窗口执行完毕后,更新集合Wrunning和Wpending
6.2)判断待执行窗口集合Wpending是否为空,如果不为空则跳转执行步骤(2),否则结束本缓存方法。
CN202110036036.5A 2021-01-12 2021-01-12 一种面向滑动窗口数据分析的Spark数据缓存方法 Active CN112667170B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110036036.5A CN112667170B (zh) 2021-01-12 2021-01-12 一种面向滑动窗口数据分析的Spark数据缓存方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110036036.5A CN112667170B (zh) 2021-01-12 2021-01-12 一种面向滑动窗口数据分析的Spark数据缓存方法

Publications (2)

Publication Number Publication Date
CN112667170A true CN112667170A (zh) 2021-04-16
CN112667170B CN112667170B (zh) 2024-04-05

Family

ID=75414391

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110036036.5A Active CN112667170B (zh) 2021-01-12 2021-01-12 一种面向滑动窗口数据分析的Spark数据缓存方法

Country Status (1)

Country Link
CN (1) CN112667170B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918356A (zh) * 2021-12-13 2022-01-11 广东睿江云计算股份有限公司 基于cuda数据快速同步方法、装置、计算机设备及存储介质
WO2023077451A1 (zh) * 2021-11-05 2023-05-11 中国科学院计算技术研究所 一种基于列存数据库的流式数据处理方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108614738A (zh) * 2018-05-14 2018-10-02 北京工业大学 一种面向交互式Spark应用的数据动态放置方法
CN110287010A (zh) * 2019-06-12 2019-09-27 北京工业大学 一种面向Spark时间窗口数据分析的缓存数据预取方法
CN112015765A (zh) * 2020-08-19 2020-12-01 重庆邮电大学 基于缓存价值的Spark缓存淘汰方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108614738A (zh) * 2018-05-14 2018-10-02 北京工业大学 一种面向交互式Spark应用的数据动态放置方法
CN110287010A (zh) * 2019-06-12 2019-09-27 北京工业大学 一种面向Spark时间窗口数据分析的缓存数据预取方法
CN112015765A (zh) * 2020-08-19 2020-12-01 重庆邮电大学 基于缓存价值的Spark缓存淘汰方法及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023077451A1 (zh) * 2021-11-05 2023-05-11 中国科学院计算技术研究所 一种基于列存数据库的流式数据处理方法及系统
CN113918356A (zh) * 2021-12-13 2022-01-11 广东睿江云计算股份有限公司 基于cuda数据快速同步方法、装置、计算机设备及存储介质
CN113918356B (zh) * 2021-12-13 2022-02-18 广东睿江云计算股份有限公司 基于cuda数据快速同步方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN112667170B (zh) 2024-04-05

Similar Documents

Publication Publication Date Title
CN112236784B (zh) 修改机器学习模型以改善局部性
US9268595B2 (en) Scheduling thread execution based on thread affinity
US7516279B2 (en) Method using stream prefetching history to improve data prefetching performance.
US9164785B2 (en) Predicting performance of a consolidated virtualized computing environment
US20170109210A1 (en) Program Execution On Heterogeneous Platform
KR102236419B1 (ko) 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체
US20180275909A1 (en) Memory management for sparse matrix multiplication
US8364908B2 (en) Migrating program objects in a multi-node computer system
NL2011627A (en) System and method for batch evaluation programs.
JP5443709B2 (ja) それぞれが異なる処理能力を有する複数のプロセッサ・ユニットに跨りタスクをスケジュールする方法、コンピュータ・プログラム、データ処理装置
CN112667170A (zh) 一种面向滑动窗口数据分析的Spark数据缓存方法
US10754744B2 (en) Method of estimating program speed-up in highly parallel architectures using static analysis
CN104461470A (zh) 微处理器以及微处理器操作方法
US20120210332A1 (en) Asynchronous programming execution
CN115150471B (zh) 数据处理方法、装置、设备、存储介质及程序产品
JP2012530976A (ja) 仮想化超並列プログラマブルハードウェアによる正規表現の検索
US20160147516A1 (en) Execution of complex recursive algorithms
US8209299B2 (en) Selectively generating program objects on remote node of a multi-node computer system
CN116225708A (zh) 一种gpu资源调度方法及装置
CN103902369A (zh) 陷阱处理期间的协作线程阵列的粒度上下文切换
CN105404635B (zh) 字符串匹配的方法、设备和异构计算系统
CN113407343A (zh) 一种基于资源分配的业务处理方法、装置及设备
US10909021B2 (en) Assistance device, design assistance method, and recording medium storing design assistance program
CN111290855B (zh) 分布式环境中多gpu服务器的gpu卡管理方法、系统及存储介质
US11354286B1 (en) Outlier identification and removal

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