CN112667170B - 一种面向滑动窗口数据分析的Spark数据缓存方法 - Google Patents
一种面向滑动窗口数据分析的Spark数据缓存方法 Download PDFInfo
- Publication number
- CN112667170B CN112667170B CN202110036036.5A CN202110036036A CN112667170B CN 112667170 B CN112667170 B CN 112667170B CN 202110036036 A CN202110036036 A CN 202110036036A CN 112667170 B CN112667170 B CN 112667170B
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000007405 data analysis Methods 0.000 title claims abstract description 14
- 238000004364 calculation method Methods 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 8
- 230000009191 jumping Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 5
- 238000005192 partition Methods 0.000 claims description 4
- 238000001914 filtration Methods 0.000 claims description 3
- 230000000737 periodic effect Effects 0.000 claims description 3
- SLXKOJJOQWFEFD-UHFFFAOYSA-N 6-aminohexanoic acid Chemical compound NCCCCCC(O)=O SLXKOJJOQWFEFD-UHFFFAOYSA-N 0.000 claims description 2
- 238000006467 substitution reaction Methods 0.000 claims description 2
- NAWXUBYGYWOOIX-SFHVURJKSA-N (2s)-2-[[4-[2-(2,4-diaminoquinazolin-6-yl)ethyl]benzoyl]amino]-4-methylidenepentanedioic acid Chemical compound C1=CC2=NC(N)=NC(N)=C2C=C1CCC1=CC=C(C(=O)N[C@@H](CC(=C)C(O)=O)C(O)=O)C=C1 NAWXUBYGYWOOIX-SFHVURJKSA-N 0.000 claims 2
- 238000012545 processing Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000002474 experimental method Methods 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 239000000306 component Substances 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012300 Sequence Analysis Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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
技术领域
本发明属于大数据内存计算领域,具体涉及大数据的数据缓存技术。
背景技术
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)根据运行状态的不同,滑动窗口应用中的窗口分为三类:处于运行态的窗口集合处于待执行态的窗口集合/>以及其他状态。
(2)选取待预取的滑动窗口
2.1)创建待预取集合创建候选集合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的输入数据集缓存在任务执行器上所消耗的内存规模为其中/>表示任务执行器exej∈Exe上因数据缓存而消耗的内存规模。根据公式
(2)计算窗口wp的数据集在任务执行器上消耗的内存规模为其中size(dbpk)用于估计数据块dbpk的缓存大小。
3.2.2)合集群中任务执行器的可用内存总量为集合其中/>代表任务执行器exej∈Exe的可用内存总量。公式(3)展示了可用内存总量的计算方法,其中/>代表任务执行器exej∈Exe所申请的最大内存规模,/>表示的是除了运行态窗口和窗口wp外,其他状态的窗口在任务执行器exej∈Exe缓存的数据规模。
3.2.3)根据公式(4)计算预取后每个任务执行器剩余的内存规模 其中/>表示的是窗口wp缓存在任务执行器exej∈Exe上的输入数据规模,/>表示的是运行态窗口wr∈Wrunning缓存在任务执行器exej∈Exe上的输入数据规模,膨胀系数α表示的是窗口在运行过程中所消耗的最大内存规模与输入数据缓存规模的比例。
3.2.4)根据公式(5)判断每一个数据块放置方案sm∈S是否满足空间条件,如果不满足空间条件,执行步骤(3.2.5)
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。
3.5)基于代价集合Cost,从状态集合S中选取代价最小的状态sp用于描述每个数据块的放置位置。
(4)判断窗口是否满足时间条件
4.1)计算待预取窗口wp的预取时间
4.1.1)基于数据块放置方案sp,根据公式(7)计算任务执行器exej∈Exe上数据块dbpk的预取时间其中rk表示预取单位数据量所耗费的时间。
4.1.2)每个任务执行器串行载入数据块,根据公式(8)计算每个任务执行器的载入时间其中/>代表任务执行器exej∈Exe预取其对应数据块的总时间。
4.1.3)根据公式(9)计算窗口wp的预取时间tp。
4.2)计算运行态窗口的剩余执行时间
(4.2.1)对于运行态窗口wr∈Wrunning,根据公式(10)估计剩余数据的载入时间其中θ表示为窗口wr与wr-1的载入时间的比例,/>表示为窗口wr-1的载入时间,如果窗口wr-1不存在则试运行小数据集观测参数/>
(4.2.2)对于运行态窗口wr∈Wrunning,根据公式(11)估计剩余计算时间其中γ表示为窗口wr与wr-1的计算时间的比例,/>表示为窗口wr已完成的计算时间,表示为窗口wr-1的计算时间。如果窗口wr-1不存在则试运行小数据集观测参数
(4.2.3)对于运行态窗口wr∈Wrunning,根据公式(12)估计其剩余的执行时间rtr。
(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)创建待预取窗口集合创建预取候选集合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不存在前置窗口,因此试运行小数据集观测为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中移除,此时集合
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测试环境配置
表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负载为移动平均法的性能观测
从表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。负载为分时段词频统计的性能观测。
从表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负载为分时段排序的性能观测
从表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,...,dvih),其中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)根据运行状态的不同,滑动窗口应用中的窗口分为三类:处于运行态的窗口集合处于待执行态的窗口集合/>以及其他状态;
(2)选取待预取的滑动窗口
2.1)创建待预取集合创建候选集合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的输入数据集缓存在任务执行器上所消耗的内存规模为其中/>表示任务执行器exej∈Exe上因数据缓存而消耗的内存规模;根据公式(2)计算窗口wp的数据集在任务执行器上消耗的内存规模为/>其中size(dbpk)用于估计数据块dbpk的缓存大小;
3.2.2)令集群中任务执行器的可用内存总量为集合其中/>代表任务执行器exej∈Exe的可用内存总量;公式(3)展示了可用内存总量的计算方法,其中/>代表任务执行器exej∈Exe所申请的最大内存规模,/>表示的是除了运行态窗口和窗口wp外,其他状态的窗口在任务执行器exej∈Exe缓存的数据规模;
3.2.3)根据公式(4)计算预取后每个任务执行器剩余的内存规模 其中/>表示的是窗口wp缓存在任务执行器exej∈Exe上的输入数据规模,/>表示的是运行态窗口wr∈Wrunning缓存在任务执行器exej∈Exe上的输入数据规模,膨胀系数α表示的是窗口在运行过程中所消耗的最大内存规模与输入数据缓存规模的比例;
3.2.4)根据公式(5)判断每一个数据块放置方案sm∈S是否满足空间条件,如果不满足空间条件,执行步骤(3.2.5);
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;
3.5)基于代价集合Cost,从状态集合S中选取代价最小的数据块放置状态sp用于描述每个数据块的放置位置;
(4)判断窗口是否满足时间条件
4.1)计算待预取窗口wp的预取时间
4.1.1)基于数据块放置状态sp,根据公式(7)计算任务执行器exej∈Exe上数据块dbpk的预取时间其中rk表示预取单位数据量所耗费的时间;
4.1.2)每个任务执行器串行载入数据块,根据公式(8)计算每个任务执行器的载入时间其中/>代表任务执行器exej∈Exe预取其对应数据块的总时间;
4.1.3)根据公式(9)计算窗口wp的预取时间tp;
4.2)计算运行态窗口的剩余执行时间
(4.2.1)对于运行态窗口wr∈Wrunning,如果r>1且窗口wr-1的输入数据已全部载入,根据公式(10)估计剩余数据的载入时间其中θ表示为窗口wr剩余输入数据的规模与wr-1输入数据规模的比例,/>表示为窗口wr-1的载入时间;如果r为1或wr-1并未运行完毕,那么从窗口wr的输入数据集中随机抽取规模比例为δ的子数据集,此时系数θ表示为/>运行并观测子数据集的载入时间/>利用公式(10)估计剩余数据的载入时间;
(4.2.2)对于运行态窗口wr∈Wrunning,如果r>1且窗口wr-1已计算完毕,根据公式(11)估计剩余计算时间其中γ表示为窗口wr输入数据规模与wr-1输入数据规模的比例,表示为窗口wr已完成的计算时间,/>表示为窗口wr-1的计算时间;如果r为1或者wr-1并未运行完毕,从窗口wr的输入数据集中抽取规模比例为δ的子数据集,此时系数γ表示为/>运行并观测子数据集的计算时间/>此时/>的值为0,利用公式(11)估计剩余的计算时间;
(4.2.3)对于运行态窗口wr∈Wrunning,根据公式(12)估计其剩余的执行时间rtr;
(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),否则结束本缓存方法。
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 CN112667170A (zh) | 2021-04-16 |
CN112667170B true 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) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023077451A1 (zh) * | 2021-11-05 | 2023-05-11 | 中国科学院计算技术研究所 | 一种基于列存数据库的流式数据处理方法及系统 |
CN113918356B (zh) * | 2021-12-13 | 2022-02-18 | 广东睿江云计算股份有限公司 | 基于cuda数据快速同步方法、装置、计算机设备及存储介质 |
Citations (3)
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缓存淘汰方法及系统 |
-
2021
- 2021-01-12 CN CN202110036036.5A patent/CN112667170B/zh active Active
Patent Citations (3)
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缓存淘汰方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112667170A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8782629B2 (en) | Associating program execution sequences with performance counter events | |
US7516279B2 (en) | Method using stream prefetching history to improve data prefetching performance. | |
NL2011613B1 (en) | System and method for batch evaluation programs. | |
JP5229731B2 (ja) | 更新頻度に基づくキャッシュ機構 | |
NL2011627B1 (en) | System and method for batch evaluation programs. | |
CN112667170B (zh) | 一种面向滑动窗口数据分析的Spark数据缓存方法 | |
US10884739B2 (en) | Systems and methods for load canceling in a processor that is connected to an external interconnect fabric | |
CN108431831B (zh) | 循环代码处理器优化 | |
US9383944B2 (en) | Data access analysis using entropy rate | |
US10558569B2 (en) | Cache controller for non-volatile memory | |
US20060074872A1 (en) | Adaptive database buffer memory management using dynamic SQL statement cache statistics | |
US20130290971A1 (en) | Scheduling Thread Execution Based on Thread Affinity | |
CN111324556B (zh) | 用于将预定数目的数据项预取到高速缓存的方法和系统 | |
US10592252B2 (en) | Efficient instruction processing for sparse data | |
CN107844380B (zh) | 一种支持指令预取的多核缓存wcet分析方法 | |
CN106874332B (zh) | 数据库访问方法和装置 | |
US20200151510A1 (en) | Adaptive batch reuse on deep memories | |
CN112597076A (zh) | 一种面向Spark的基于数据感知的缓存替换方法及系统 | |
WO2017116927A1 (en) | Zero cache memory system extension | |
CN116225708A (zh) | 一种gpu资源调度方法及装置 | |
US20220114137A1 (en) | Methods, apparatus, and articles of manufacture to generate command lists to be offloaded to accelerator circuitry | |
US11610135B2 (en) | Information processing apparatus, information processing method, and non-transitory computer-readable storage medium for storing program | |
CN111190800B (zh) | 预测主机的批量运行时长的方法、系统、装置及存储介质 | |
CN114518841A (zh) | 存储器中处理器和使用存储器中处理器输出指令的方法 | |
US8484423B2 (en) | Method and apparatus for controlling cache using transaction flags |
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 |