CN110287010B - 一种面向Spark时间窗口数据分析的缓存数据预取方法 - Google Patents
一种面向Spark时间窗口数据分析的缓存数据预取方法 Download PDFInfo
- Publication number
- CN110287010B CN110287010B CN201910507343.XA CN201910507343A CN110287010B CN 110287010 B CN110287010 B CN 110287010B CN 201910507343 A CN201910507343 A CN 201910507343A CN 110287010 B CN110287010 B CN 110287010B
- Authority
- CN
- China
- Prior art keywords
- data
- time window
- task executor
- task
- cache
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向Spark时间窗口数据分析的缓存数据预取方法,该方法分为6个步骤:初始化、判断预取时机、计算预取数据规模、确定预取数据放置位置、判断是否结束预取和结束。本发明依据时间窗口数据处理需求,以时间窗口为序,分段将时间窗口所需处理的RDD数据读入Spark缓存空间,并将已处理的RDD数据移出缓存,从而保障在缓存空间有限的情况下,每一个时间窗口需要处理的RDD数据均被成功缓存于内存空间,提升应用的执行效率。
Description
技术领域
本发明属于大数据计算领域,具体涉及分布式内存计算系统的缓存优化技术。
背景技术
Spark内存计算系统是大数据处理领域的最新技术进展。Spark系统的特点在于基于内存存储反复处理的海量数据,从而提升大数据处理效率。同时,Spark系统引入弹性分布式数据集(Resilient Distributed Dataset,RDD)作为海量、分布存储数据的抽象表达,降低了用户的操作门槛。
基于时间窗口的数据分析是指对一段时序连续的采集数据,以固定/可变的滑动时间窗口对局部数据进行反复的分析处理,并将局部处理结果进行聚合,形成最终的分析结果。时间窗口数据分析在移动互联网及物联网场景中广泛存在。时间窗口数据分析是较为典型的迭代型应用,是Spark系统支持的主要应用类之一。时间窗口数据分析应用通过充分利用Spark系统内存级数据缓存存储海量数据并基于时间窗口进行反复处理,可获得较高的数据处理效率。因此,Spark系统数据缓存性能是决定时间窗口数据分析应用运行效率的关键。然而,既有Spark系统数据缓存在支撑时间窗口数据分析应用运行上尚存在如下不足:
(1)无法依据数据时间窗口处理特征,分时、局部缓存海量数据,降低了缓存数据命中率。RDD是Spark系统中分布存储海量数据的抽象表达和缓存单位。既有Spark系统无法按需缓存RDD中的局部数据。因此,在内存空间受限的场景下,无法保障当前时间窗口数据缓存于内存中,增加了数据读取开销,降低应用执行效率。
(2)无法面向应用数据处理模式进行缓存数据预取,延长应用执行时间。既有Spark系统中,应用的数据读取和数据计算阶段相互独立,串行完成。然而时间窗口数据分析具有较为确定的数据处理模式,既有系统无法充分利用前期时间窗口数据处理阶段进行后续窗口数据的预取,延长了应用的执行时间。
发明内容
针对上述问题,本发明提出一种面向Spark时间窗口数据分析的缓存数据预取方法。本发明依据时间窗口数据处理需求,以时间窗口为序,分段将时间窗口所需处理的RDD数据读入Spark缓存空间,并将已处理的RDD数据移出缓存,从而保障在缓存空间有限的情况下,每一个时间窗口需要处理的RDD数据均被成功缓存于内存空间,提升应用的执行效率。
本发明所述的缓存管理方法分为6个步骤:初始化、判断预取时机、计算预取数据规模、确定预取数据放置位置、判断是否结束预取和结束。
上述方法在计算机上按以下步骤实现:
在Spark平台开始处理时间窗口数据分析应用的时候,依次执行以下步骤:
(1)初始化:从Spark平台的各个任务执行器收集节点信息INFO,INFO的表示形式如公式(1)所示
INFO={EXEINFO,timeWindowINFO} (1)
timeWindowINFO为Spark时间窗口数据分析应用需要处理的时间窗口信息,EXEINFO={exeNum,exeStorCap,EXE},其中,exeNum为Spark时间窗口数据分析应用所包含的任务执行器总数量,exeStorCap为任务执行器的存储容量,EXE为任务执行器的集合,可表示为EXE={exe1,exe2,...,exeexeNum}。
timeWindowINFO可表示为timeWindowINFO={twNum,TimeWindow}。其中,twNum为Spark时间窗口数据分析应用中时间窗口的个数;TimeWindow是时间窗口集合,可表示为TimeWindow={twDatai|1≤i≤twNum},twDatai表示第i个时间窗口,对于第i个时间窗口,可表示为twDatai={startTimei,endTimei,BlockINFOi},其中,startTimei是第i个时间窗口的起始时间,endTimei是第i个时间窗口的终止时间,BlockINFOi是第i个时间窗口中包含的数据块信息,可表示为BlockINFOi={blockNumi,blockDefaultSize,Blocksi},其中blockNumi是第i个时间窗口中包含的数据块的数量,blockDefaultSize为数据块的默认大小,Blocki为第i个时间窗口包含的数据块集合,可表示为Blocki={(blockij,locij)|1≤j≤blockNumi},blockij表示第i个时间窗口中包含的第j个数据块,locij表示blockij所在的位置具体在哪个任务执行器上。
1.1)获取时间窗口信息,包括起始时间st,终止时间ed和时间窗口移动步长wd。
1.2)根据st和ed确定第一个时间窗口。
1.3)获取第一个时间窗口的数据块Blocks1。
1.4)计算Blocks1对于任务执行器的数据本地性dataLocij,利用公式(2)计算dataLocij。
1.5)根据Blocks1的数据本地性,将数据块与本地性较高的任务执行器做映射。
1.6)任务执行器缓存数据块。
(2)预取时机判断
2.1)判断是否一个时间窗口数据twDatai处理结束,若处理结束,则执行步骤2.2),若没有处理结束,则等待。
2.2)定义第i个任务执行器的缓存时间窗口数据为twDataParj,利用每个任务执行器的监控器获取twDataParj。
2.4)定义第i个任务执行器的局部结果数据为locDataParj,利用每个任务执行器的监控器获取locDataParj。
2.6)定义数据膨胀率为dfi,任务执行器Ei的数据膨胀率dfi是指Ei中局部结果数据分区总量与已处理的时间窗口数据分区总量的比值,利用公式(3)计算dfi。
2.7)定义第i个任务执行器剩余缓存空间RMi,任务执行器Ei的缓存剩余空间是指在任务执行器中既有预取时间窗口数据全部处理完毕后,缓存的剩余空间规模,公式表达如公式(4)。
2.8)定义系统中剩余总缓存空间TFM,利用公式(5)计算TFM。
其中,exeNum表示任务执行器总数。
2.9)定义任务执行器的计算能力CCi,用任务执行器Ei的CPU核心数量表示。
2.10)定义最小预取量MPSi,利用公式(6)计算MPSi。
其中,TCN表示集群中的CPU总核心数。
2.11)判断是否剩余缓存总空间满足TFM≥Size(twDatai+1),若满足则执行步骤2.12)若不满足则执行步骤(2)。
2.12)判断每个任务执行器Ei是否满足RMi≥MPSi,1≤i≤exeNum,若满足则执行步骤(3),若不满足则执行步骤(2)。
(3)判断预取数据规模
3.1)确定预取数据块数量k,k满足在不超过剩余缓存总空间条件下可预取的最大数据规模。利用公式(7)计算k。
3.2)定义核预取数据块BlockNumi,利用公式(8)计算BlockNumi。
(4)确定预取数据放置位置
4.1)创建每个任务执行器Ei的预取列表prefetchListi,prefetchListi用来记录每个任务执行器Ei需要预取的数据块。
4.2)获取需要预取的k个时间窗口中数据块的本地性dataLocij,利用公式(9)计算dataLocij。
4.3)根据dataLocij填充prefetchListi。
4.4)定义任务执行器的预取权值为当前任务执行器EPWi的计算能力与集群中总CPU核心数的比值,利用公式(10)计算EPWi。
4.5)计算平均预取长度avgPLS,利用公式(11)计算avgPLS。
其中,length是预取列表的长度。
4.6)对于每个任务执行器Ei,判断缓存列表prefetchListi长度是否超过avgPLS,若超过则将多出的部分迁移到prefetchListi低于avgPLS的任务执行器中。
4.7)每个任务执行器启动预取线程读取prefetchListi中的数据块。
(5)判断是否完成全部数据预取,若完成全部数据预取,则执行步骤(6),若未完成全部预取,则执行步骤(2)
(6)结束:中止预取
为实现上述方法,本发明需要在Spark系统中的每个任务执行器上增加信息收集模块,用于收集在时间窗口数据分析应用执行过程中各个节点的数据输入量、中间结果大小,利用收集到的相关信息进行初始化,并读取一个时间窗口(步骤(1)),利用这些信息读取时间窗口,获得初始数据膨胀率,并判断预取时机,若满足预取时机则执行步骤(3),若未满足预取时机的继续执行步骤(2)(步骤(2)),然后结合Spark系统中收集到的节点信息和时间窗口对应的数据块信息,确定预取数据规模(步骤(3)),接下来利用信息收集模块收集的各个节点中的数据块本地性等信息,并结合任务执行器的计算能力,构建预取列表并完成预取(步骤(4)),判断是否完成所有数据的预取,若完成则执行步骤(6),若未完成则执行步骤(2),最后若所有时间窗口处理完成,则结束本方法(步骤,6)),中止预取流程。
附图说明
图1为本发明方法所依附的Spark平台的部署图。
图2为采用本发明方法的Spark平台中新增加的模块及其交互关系图。
图3为本发明方法的总体流程图。
图4为初始化流程图。
图5为预取时机判断流程图。
图6为预取数据规模选取流程图。
图7为预取数据放置位置选取流程图。
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。
本发明所提出的一种面向Spark时间窗口数据分析应用的缓存管理方法可以依附于现有的Spark分布式内存计算平台,通过修改或增加现有的软件模块来实现。图1是本方法所依附的Spark平台的部署图。该平台由多个计算机服务器(平台节点)组成,服务器间通过网络连接。平台节点分为三类,包括一个管理节点(Master)、一个客户端节点(Client)和多个计算节点(Worker)。本发明方法所依附的Spark平台包含以下核心软件模块:DAG调度器模块(DAGScheduler)、任务执行器模块(Executor)、主数据块管理模块(BlockManagerMaster)和从数据块管理模块(BlockManager)。DAGScheduler负责提供时间窗口数据分析应用在执行过程中产生的DAG信息,将DAG信息收集,作为判断预取时机的参考信息。Executor负责收集自身的CPU核数信息以及任务执行的信息。BlockManagerMaster主要负责维护集群中数据块对应的元数据信息,以及BlockManager与Executor之间的对应情况,主要包括各个节点中的BlockManagerId与BlockManager对应的Executor的内存使用情况、管理的数据块列表、已缓存的数据块以及Executor终端点的引用,BlockManagerId与ExecutorId之间的映射表,各个BlockManager中BlockId与BlockManagerId的映射表。BlockManager模块的主要功能有四个,一是负责各个节点中BlockManager与BlockManagerMaster之间的通信;二是负责存储数据块;三是负责维护一个缓存列表,用来记录当前BlockManager需要缓存哪些数据块;四是负责数据块的读取和传输。
为实现本发明方法,在Master中,新增了一个预取管理模块(PrefetchManager)。PrefetchManager负责控制预取的整体流程,与各个模块协调,实现发明内容中的步骤(1)到步骤(6),主要包括:第一,初始化时间窗口与磁盘中数据块之间的对应关系;第二,通过Prefetch收集的DAG信息判断预取操作的触发时机;第三,通过Monitor中获取的数据计算预取数据量的大小;第四,根据时间窗口数据分析应用的执行状态,判断是否结束预取流程。在Worker中,新增了一个任务执行器监控器模块(Monitor)。Monitor负责收集各个任务执行器中的信息,包括任务执行器的缓存数据大小、cpu核心数量、缓存总空间大小、并计算每个任务执行器的数据膨胀率。
下面结合图2发明内容流程说明本发明方法在计算机上的具体实施方法。
本实施方法可以分为以下步骤
在Spark平台中处理时间窗口数据分析应用时,依次执行以下步骤:
(1)初始化:从Spark平台的各个任务执行器收集节点信息INFO,INFO的表示形式如公式(1)所示
INFO={EXEINFO,timeWindowINFO} (1)
timeWindowINFO为Spark时间窗口数据分析应用需要处理的时间窗口信息,EXEINFO={6,4,EXE},其中,6为Spark时间窗口数据分析应用所包含的任务执行器总数量,4为任务执行器的存储容量,单位为GB,EXE为任务执行器的集合,可表示为EXE={exe1,exe2,exe3,exe4,exe5,exe6}。
timeWindowINFO可表示为timeWindowINFO={5,TimeWindow}。其中,5为Spark时间窗口数据分析应用中时间窗口的个数;TimeWindow是时间窗口集合,可表示为twDatai表示第i个时间窗口,对于第i个时间窗口,可表示为其中,2013/1/1 00:00:00是第i个时间窗口的起始时间,2013/1/2 00:00:00是第i个时间窗口的终止时间,BlockINFOi是第i个时间窗口中包含的数据块信息,可表示为BlockINFOi={128,128,Blocksi},其中128是第1个时间窗口中包含的数据块的数量,128为数据块的默认大小,单位为MB,Blocki为第i个时间窗口包含的数据块集合,可表示为block11表示第i个时间窗口中包含的第j个数据块,loc表示blockij所在的位置具体在某个任务执行器上。
1.1)获取时间窗口信息,包括起始时间2013/1/1 00:00:00,终止时间2013/1/100:00:00和时间窗口移动步长2.4h。
1.2)根据st和ed确定第一个时间窗口。
1.3)获取第一个时间窗口的数据块Blocks1。
1.4)计算Blocks1对于任务执行器的数据本地性dataLocij,利用公式(2)计算dataLocij。
1.5)根据Blocks1的数据本地性,将数据块与本地性较高的任务执行器做映射。
1.6)任务执行器预取数据块。
(2)预取时机判断
2.1)判断是否一个时间窗口数据twDatai处理结束,若处理结束,则执行步骤2.2),若没有处理结束,则等待。
2.2)定义第i个任务执行器的缓存时间窗口数据为twDataParj,利用每个任务执行器的监控器获取twDataParj。
twDataPar1=128,twDataPar2=128,twDataPar3=128,twDataPar4=128
2.4)定义第i个任务执行器的局部结果数据为locDataParj,利用每个任务执行器的监控器获取locDataParj。
locDataPar1=132,locDataPar2=143,locDataPar3=137,locDataPar4=139
2.6)定义数据膨胀率为dfi,任务执行器Ei的数据膨胀率dfi是指Ei中局部结果数据分区总量与已处理的时间窗口数据分区总量的比值,利用公式(3)计算dfi。
df1=1.08,df2=1.10,df3=1.07,df4=1.10,df5=1.11,df6=1.06
2.7)定义第i个任务执行器剩余缓存空间RMi,任务执行器Ei的缓存剩余空间是指在任务执行器中既有预取时间窗口数据全部处理完毕后,缓存的剩余空间规模,公式表达如公式(4)。
RM1=3544,RM2=3252,RM3=3412,RM4=3392,RM5=3102,RM6=3417
2.8)定义系统中剩余总缓存空间TFM为在应用包含的所有任务执行器中所有缓存空间的总和,利用公式(5)计算TFM。
TFM=16294
其中,6表示任务执行器总数。
2.9)定义任务执行器的计算能力CCi是为了评估当前任务执行器能同时处理的任务数量,用任务执行器Ei的CPU核心数表示。
2.10)定义最小预取量MPSi为每个任务执行器在与自己计算能力匹配的前提下,根据下一个时间窗口的数据块个数确定的最小预取量,利用公式(6)计算MPSi。
MPS1=682,MPS2=682,MPS3=682,MPS4=682,MPS5=682,MPS6=682
其中,TCN表示集群中的CPU总核心数。
2.11)判断是否剩余缓存总空间满足TFM≥Size(twDatai+1),若满足则执行步骤2.12)若不满足则执行步骤(2)。
2.12)判断每个任务执行器Ei是否满足RMi≥MPSi,1≤i≤exeNum,若满足则执行步骤(3),若不满足则执行步骤(2)。
(3)判断预取数据规模
3.1)确定预取数据块数量k,k满足在不超过剩余缓存总空间条件下可预取的最大数据规模。k需要满足公式(7)。
k取值为3。
3.2)核预取数据块BlockNumi是指每个任务执行器中CPU核心能占有的预取数据块数量,与每个任务执行器的计算能力所匹配,利用公式(8)计算BlockNumi。
各个任务执行器的和预取数据块分别为:
BlockNum1=16
BlockNum2=16
BlockNum3=16
BlockNum4=16
BlockNum5=16
BlockNum6=16
(4)确定预取数据放置位置
4.1)创建每个任务执行器Ei的预取列表prefetchListi,prefetchListi用来记录每个任务执行器Ei需要预取的数据块。
4.2)获取需要预取的k个时间窗口中数据块的本地性dataLocij,利用公式(9)计算dataLocij。
4.3)根据dataLocij填充prefetchListi。
4.4)定义任务执行器的预取权值为当前任务执行器EPWi的计算能力与集群中总CPU核心数的比值,利用公式(10)计算EPWi。
各个任务执行器的预取权值分别为:
EPW1=1.67
EPW2=1.67
EPW3=1.67
EPW4=1.67
EPW5=1.67
EPW6=1.67
4.5)计算平均预取长度avgPLS,利用公式(11)计算avgPLS。
其中,length是预取列表的长度。avgPLS=16
4.6)对于每个任务执行器Ei,判断缓存列表prefetchListi长度是否超过avgPLS,若超过则将多出的部分迁移到prefetchListi低于avgPLS的任务执行器中。
4.7)每个任务执行器启动预取线程读取prefetchListi中的数据块。
(5)判断是否完成全部数据预取,若完成全部数据预取,则执行步骤(6),若未完成全部预取,则执行步骤(2)
(6)结束:中止预取流程
为了评估本文提出的机制与策略的性能,选取的性能测试评价指标为Spark时间窗口数据分析应用的应用执行时间。性能测试选取7个物理节点作为测试集群,节点的硬件配置包括:Intel(R)Xeon(R)CPU E5-2660 0@2.2.GHz的CPU、16GB DDR3 RAM、1TB SATA硬盘,节点间采用千兆以太网互连,操作系统为Centos6.5。实现选用真实场景下的数据集并进行扩增的到测试数据集,测试的应用包括移动平均法、分时段排序和分时段词频统计。
对方法进行测试,测试在不同输入数据规模场景下,分别改变任务执行器内存规模以及Spark时间窗口数据分析应用中时间窗口的数量进行测试。分别选取输入数据规模为20GB,在以上三种数据规模的场景下,分别是任务执行器的内存为8GB;每个应用程序的时间窗口数量分别为5个时间窗口、10个时间窗口和15个时间窗口。实验包含9组,如表1所示。
表1输入数据规模为20GB时测试环境配置情况
时间窗口为5个,任务执行器内存为8GB的测试结果如表2所示。
表2时间窗口为5个,任务执行器内存为8GB的测试结果
从以上实验结果可以看出,相比于原始Spark,采用了Spark时间窗口缓存管理方法的Spark平台在执行Spark时间窗口数据分析应用时,移动平均法、分时段排序和分时段词频统计的应用执行时间分别缩短了80.58%、56.01%和78.33%。
时间窗口为10个,任务执行器内存为8GB的测试结果如表3所示。
表3时间窗口为10个,任务执行器内存为8GB的测试结果
从以上实验结果可以看出,相比于原始Spark,采用了Spark时间窗口缓存管理方法的Spark平台在执行Spark时间窗口数据分析应用时,移动平均法、分时段排序和分时段词频统计的应用执行时间分别缩短了75.03%、55.99%和73.88%。
时间窗口为15个,.任务执行器内存为8GB的测试结果如表4所示。
表4时间窗口为15个,任务执行器内存为8GB的测试结果
从以上实验结果可以看出,相比于原始Spark,采用了Spark时间窗口缓存管理方法的Spark平台在执行Spark时间窗口数据分析应用时,移动平均法、分时段排序和分时段词频统计的应用执行时间分别缩短了72.28%、58.40%和71.26%。实验结果表明采用本方法的Spark平台在处理Spark时间窗口数据分析应用时,应用执行时间明显缩短,这是因为本方法将原本Spark平台的全文件读取创建RDD更改为根据时间窗口读取数据并创建RDD,并提供了预取策略,将Spark平台的数据读取与计算重叠,提高应用执行效率。
最后应说明的是:以上示例仅用以说明本发明而并非限制本发明所描述的技术,而一切不脱离发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。
以上实施例仅用以说明本发明,而并非限制本发明所描述的技术方案。因此,一切不脱离本发明的精神和范围的技术方案及其改进,均应涵盖在本发明的权利要求范围当中。
Claims (3)
1.一种面向Spark时间窗口数据分析的缓存数据预取方法,其特征在于:
本方法在计算机中实现,在Spark平台开始处理时间窗口数据分析应用的时候,依次执行以下步骤:
(1)初始化:从Spark平台的各个任务执行器收集节点信息INFO,INFO的表示形式如公式(1)所示
INFO={EXEINFO,timeWindowINFO} (1)
timeWindowINFO为Spark时间窗口数据分析应用需要处理的时间窗口信息,EXEINFO={exeNum,exeStorCap,EXE},其中,exeNum为Spark时间窗口数据分析应用所包含的任务执行器总数量,exeStorCap为任务执行器的存储容量,EXE为任务执行器的集合,表示为EXE={exe1,exe2,...,exeexeNum};
timeWindowINFO表示为timeWindowINFO={twNum,TimeWindow};其中,twNum为Spark时间窗口数据分析应用中时间窗口的个数;TimeWindow是时间窗口集合,表示为TimeWindow={twDatai|1≤i≤twNum},twDatai表示第i个时间窗口,对于第i个时间窗口,表示为twDatai={startTimei,endTimei,BlockINFOi},其中,startTimei是第i个时间窗口的起始时间,endTimei是第i个时间窗口的终止时间,BlockINFOi是第i个时间窗口中包含的数据块信息,表示为BlockINFOi={blockNumi,blockDefaultSize,Blocksi},其中blockNumi是第i个时间窗口中包含的数据块的数量,blockDefaultSize为数据块的默认大小,Blocki为第i个时间窗口包含的数据块集合,表示为Blocki={(blockij,locij)|1≤j≤blockNumi},blockij表示第i个时间窗口中包含的第j个数据块,locij表示blockij所在的位置具体在哪个任务执行器上;
1.1)获取时间窗口信息,包括起始时间st,终止时间ed和时间窗口移动步长wd;
1.2)根据st和ed确定第一个时间窗口;
1.3)获取第一个时间窗口的数据块Blocks1;
1.4)计算Blocks1对于任务执行器的数据本地性dataLocij,利用公式(2)计算dataLocij;
1.5)根据Blocks1的数据本地性,将数据块与本地性较高的任务执行器做映射;
1.6)任务执行器缓存数据块;
(2)预取时机判断
2.1)判断是否一个时间窗口数据twDatai处理结束,若处理结束,则执行步骤2.2),若没有处理结束,则等待;
2.2)定义第i个任务执行器的缓存时间窗口数据为twDataParj,利用每个任务执行器的监控器获取twDataParj;
2.4)定义第i个任务执行器的局部结果数据为locDataParj,利用每个任务执行器的监控器获取locDataParj;
2.6)定义数据膨胀率为dfi,任务执行器Ei的数据膨胀率dfi是指Ei中局部结果数据分区总量与已处理的时间窗口数据分区总量的比值,利用公式(3)计算dfi;
2.7)定义第i个任务执行器剩余缓存空间RMi,任务执行器Ei的缓存剩余空间是指在任务执行器中既有预取时间窗口数据全部处理完毕后,缓存的剩余空间规模,公式表达如公式(4);
2.8)定义系统中剩余总缓存空间TFM,利用公式(5)计算TFM;
其中,exeNum表示任务执行器总数;
2.9)定义任务执行器的计算能力CCi,用任务执行器Ei的CPU核心数量表示;
2.10)定义最小预取量MPSi,利用公式(6)计算MPSi;
其中,TCN表示集群中的CPU总核心数;
2.11)判断是否剩余缓存总空间满足TFM≥Size(twDatai+1),若满足则执行步骤2.12)若不满足则执行步骤(2);
2.12)判断每个任务执行器Ei是否满足RMi≥MPSi,1≤i≤exeNum,若满足则执行步骤(3),若不满足则执行步骤(2);
(3)判断预取数据规模
3.1)确定预取数据块数量k,k满足在不超过剩余缓存总空间条件下可预取的最大数据规模;利用公式(7)计算k;
3.2)定义核预取数据块BlockNumi,利用公式(8)计算BlockNumi;
(4)确定预取数据放置位置
4.1)创建每个任务执行器EPWi的预取列表prefetchListi,prefetchListi用来记录每个任务执行器EPWi需要预取的数据块;
4.2)获取需要预取的k个时间窗口中数据块的本地性dataLocij,利用公式(9)计算dataLocij;
4.3)根据dataLocij填充prefetchListi;
4.4)定义任务执行器的预取权值为当前任务执行器EPWi的计算能力与集群中总CPU核心数的比值,利用公式(10)计算EPWi;
4.5)计算平均预取长度avgPLS,利用公式(11)计算avgPLS;
其中,length是预取列表的长度;
4.6)对于每个任务执行器Ei,判断缓存列表prefetchListi长度是否超过avgPLS,若超过则将多出的部分迁移到prefetchListi低于avgPLS的任务执行器中;
4.7)每个任务执行器启动预取线程读取prefetchListi中的数据块;
(5)判断是否完成全部数据预取,若完成全部数据预取,则执行步骤(6),若未完成全部预取,则执行步骤(2)
(6)结束:中止预取。
2.根据权利要求1所述的一种面向Spark时间窗口数据分析的缓存数据预取方法,其特征在于:当平台处理时间窗口数据分析应用时,在本方法的各步骤中,先从平台中各个组件采取信息,再读取一个时间窗口,计算数据膨胀率和剩余缓存空间,并判断与缓存时机,计算预缓存数据大小,随后进行预缓存数据的数据放置,当所有时间窗口处理结束后,结束流程。
3.根据权利要求1所述的一种面向Spark时间窗口数据分析的缓存数据预取方法,其特征在于:该平台由多个计算机服务器组成,服务器间通过网络连接;平台节点分为三类,包括一个管理节点Master、一个客户端节点Client和多个计算节点Worker;本方法所依附的Spark平台包含以下核心软件模块:DAG调度器模块DAGScheduler、任务执行器模块Executor、主数据块管理模块BlockManagerMaster和从数据块管理模块BlockManager;DAGScheduler负责提供时间窗口数据分析应用在执行过程中产生的DAG信息,将DAG信息收集,作为判断预缓存时机的参考信息;Executor负责收集自身的CPU核数信息以及任务执行的信息;BlockManagerMaster主要负责维护集群中数据块对应的元数据信息,以及BlockManager与Executor之间的对应情况,包括各个节点中的BlockManagerId与BlockManager对应的Executor的内存使用情况、管理的数据块列表、已缓存的数据块以及Executor终端点的引用,BlockManagerId与ExecutorId之间的映射表,各个BlockManager中BlockId与BlockManagerId的映射表;BlockManager模块的主要功能有四个,一是负责各个节点中BlockManager与BlockManagerMaster之间的通信;二是负责存储数据块;三是负责维护一个缓存列表,用来记录当前BlockManager需要缓存哪些数据块;四是负责数据块的读取和传输;
在Master中,新增一个预缓存管理模块PrefetchManager;PrefetchManager负责控制预缓存的整体流程,与各个模块协调,实现步骤(1)到步骤(6);在Worker中,新增一个工作节点监控器模块Monitor;Monitor负责收集各个工作节点中的信息,包括工作节点的缓存数据大小、cpu核心数量、缓存总空间大小并计算每个工作节点的数据膨胀率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910507343.XA CN110287010B (zh) | 2019-06-12 | 2019-06-12 | 一种面向Spark时间窗口数据分析的缓存数据预取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910507343.XA CN110287010B (zh) | 2019-06-12 | 2019-06-12 | 一种面向Spark时间窗口数据分析的缓存数据预取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110287010A CN110287010A (zh) | 2019-09-27 |
CN110287010B true CN110287010B (zh) | 2021-09-14 |
Family
ID=68004161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910507343.XA Active CN110287010B (zh) | 2019-06-12 | 2019-06-12 | 一种面向Spark时间窗口数据分析的缓存数据预取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110287010B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110929659B (zh) * | 2019-11-28 | 2023-04-18 | 中国人民解放军国防科技大学 | 基于自适应调整步长的大数据作业采样方法和装置 |
CN113128531B (zh) * | 2019-12-30 | 2024-03-26 | 上海商汤智能科技有限公司 | 一种数据处理方法及装置 |
CN112612823B (zh) * | 2020-12-14 | 2022-07-19 | 南京铁道职业技术学院 | 一种基于PySpark和Pandas融合的大数据时序分析方法 |
CN112667170B (zh) * | 2021-01-12 | 2024-04-05 | 北京工业大学 | 一种面向滑动窗口数据分析的Spark数据缓存方法 |
CN113342313B (zh) * | 2021-05-21 | 2023-04-18 | 上海大学 | 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法 |
CN114419875B (zh) * | 2021-12-08 | 2023-12-22 | 斑马网络技术有限公司 | 车辆行程切分方法、装置及存储介质 |
CN115794900A (zh) * | 2022-11-10 | 2023-03-14 | 南京捷崎信息科技有限公司 | 一种数据处理方法及系统 |
CN116599833B (zh) * | 2023-07-18 | 2023-10-03 | 广州世炬网络科技有限公司 | 对前传网络进行故障排查的方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902260A (zh) * | 2012-12-25 | 2014-07-02 | 华中科技大学 | 一种对象文件系统的预取方法 |
CN106528865A (zh) * | 2016-12-02 | 2017-03-22 | 航天科工智慧产业发展有限公司 | 一种快速精准的交通大数据清洗方法 |
CN108614738A (zh) * | 2018-05-14 | 2018-10-02 | 北京工业大学 | 一种面向交互式Spark应用的数据动态放置方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9697128B2 (en) * | 2015-06-08 | 2017-07-04 | International Business Machines Corporation | Prefetch threshold for cache restoration |
-
2019
- 2019-06-12 CN CN201910507343.XA patent/CN110287010B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902260A (zh) * | 2012-12-25 | 2014-07-02 | 华中科技大学 | 一种对象文件系统的预取方法 |
CN106528865A (zh) * | 2016-12-02 | 2017-03-22 | 航天科工智慧产业发展有限公司 | 一种快速精准的交通大数据清洗方法 |
CN108614738A (zh) * | 2018-05-14 | 2018-10-02 | 北京工业大学 | 一种面向交互式Spark应用的数据动态放置方法 |
Non-Patent Citations (4)
Title |
---|
A Survey of Recent Prefetching Techniques for Processor Caches;Sparsh Mittal;《ACM COMPUTING SURVEYS》;20160831;第49卷(第2期);第36页 * |
Spark数据处理平台中内存数据空间管理技术研究;王海华;《中国优秀硕士学位论文全文数据库 信息科技辑》;20170315(第3期);I138-3816 * |
Stream Data Load Prediction for Resource Scaling Using Online Support Vector Regression;Zhigang Hu;《Algorithms》;20190214;第12卷(第2期);第1-13页 * |
智慧协同的列车检修设备大数据平台研究与实现;吴若豪;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180615(第6期);C033-146 * |
Also Published As
Publication number | Publication date |
---|---|
CN110287010A (zh) | 2019-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110287010B (zh) | 一种面向Spark时间窗口数据分析的缓存数据预取方法 | |
CN108920387B (zh) | 降低读延迟的方法、装置、计算机设备及存储介质 | |
US20190361811A1 (en) | Data processing apparatus and prefetch method | |
JP6020448B2 (ja) | データベース性能予測装置及びデータベース予測方法 | |
US20210271640A1 (en) | File loading method and apparatus, electronic device, and storage medium | |
US20150195371A1 (en) | Changing a cache queue based on user interface pointer movement | |
CN115712583B (zh) | 一种提升分布式缓存跨节点访问性能的方法及装置、介质 | |
CN107844380B (zh) | 一种支持指令预取的多核缓存wcet分析方法 | |
CN107370807B (zh) | 基于透明服务平台数据访问的服务端及其缓存优化方法 | |
CN111708720A (zh) | 一种数据缓存方法、装置、设备及介质 | |
WO2022057749A1 (zh) | 内存缺页异常的处理方法、装置、设备及存储介质 | |
WO2021190501A1 (zh) | 数据预取方法、装置以及存储设备 | |
JP6394231B2 (ja) | データ配置制御プログラム、データ配置制御装置およびデータ配置制御方法 | |
Pan et al. | Penalty-and locality-aware memory allocation in redis using enhanced AET | |
CN116501696B (zh) | 适用于分布式深度学习训练预取缓存管理的方法和装置 | |
CN115470157A (zh) | 预取方法、电子设备、存储介质及程序产品 | |
CN111126619B (zh) | 一种机器学习方法与装置 | |
CN116931838A (zh) | 一种固态盘缓存管理方法、系统、电子设备及存储介质 | |
JP2018511131A (ja) | オンライン媒体のための階層的なコストベースのキャッシング | |
CN116185287A (zh) | 一种降低读延时的方法、装置及固态硬盘 | |
Wong et al. | Baleen:{ML} Admission & Prefetching for Flash Caches | |
JP2022046413A (ja) | 記憶デバイスのための改良された先読み能力 | |
CN110825652B (zh) | 淘汰磁盘块上的缓存数据的方法、装置及设备 | |
CN111831585A (zh) | 数据储存设备及其数据预测方法 | |
KR102031490B1 (ko) | 프리페치 장치 및 방법 |
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 |