分布式语义感知高速缓存的制作方法
未命名
09-28
阅读:69
评论:0
1.本技术涉及大规模数据处理系统,尤其涉及分布式语义感知高速缓存,所述分布式语义感知高速缓存使用对应的语义感知命令替换传统的高速缓存存储操作,所述命令使高速缓存内容能够被分布式数据处理系统中的多个用户利用。
背景技术:
2.分布式计算引擎通常接受来自用户的呈分布式无环图(distributed acyclic graph,dag)的形式的作业。图1中示出了示例分布式计算引擎100。如图1所示,驱动模块110负责将作业划分成多个较小的任务,并将任务分配给工作程序模块120以用于执行。分布式计算引擎由向驱动模块110发送呈dag的形式的作业请求的用户130在(1)处操作。在(2)处,驱动模块110根据输入dag创建经优化的执行dag,并将其划分成多个任务,其中每个任务可以在单个工作程序模块120中执行。所述任务被发送到工作程序模块120用于以特定顺序执行。在(3)处,工作程序模块120响应于加载命令从存储140加载初始数据集,处理所述初始数据集(例如使用过滤器提取记录、对记录计数等),并在必要时将该输出映射并存储回存储140。在(4)处,工作程序模块120将与对应任务的执行有关的确认或结果发送回驱动模块110。在(5)处,当所有任务完成时,驱动模块110将与作业的整个执行有关的确认或结果发送回用户130。
3.数据分析作业通常使用具有数百万甚至数十亿记录的大型数据集。然而,结果可能仅取决于原始记录的一小部分。例如,由从部署在大范围内海量房屋中的传感器以频繁的速度采集的记录组成的数据集可能非常巨大。然而,特定作业的结果可能只与这些记录中的一小部分有关。这种作业的典型示例如下:
4.加载("\"data/*.csv\"").过滤(xx.temp=^'hot^').映射(
…
)...
5.如图1所示,此作业从一组逗号分隔值(comma separated value,csv)文件在150处加载数据。然后,此作业在160处过滤掉没有热温度(》100
°
1)的所有记录。只有在气候温暖区域的温暖时段期间的记录才会影响在170处的最终计数。可以在180处应用映射变换,以便利于在190处存储数据。
6.用于大型数据工作负载(例如spark)的分布式计算引擎100采用了一种朴素的方法来处理如上所述的工作负载。用户130提供呈dag的形式的作业(如上面的简单示例,加载
→
过滤
→…
)。然后,分布式计算引擎100根据可用资源和工作负载特征根据用户提供的dag创建经优化的执行计划。再次使用上述示例,类似于图2所示的dag执行计划(“dag计划”)在假设分布式计算引擎100将数据集划分成四个不同的分区200(p1、p2、p3、p4)的前提下构建。dag计划解释了分布式计算引擎要如何执行dag。分区200内的部分数据具有热温度的记录210,而其余数据属于不同的温度范围(暖220、凉230和冷240)。对于每个分区200,进程加载对应的数据,在250处仅过滤热温度记录210,并继续随后操作,包括执行便利于数据存储的映射变换260。虽然只有一小部分原始数据(即热温度记录210)会影响结果,但该策略导致:
[0007]-与初始数据集大小相似的存储输入/输出(input/output,i/o)开销;
[0008]-计算侧(处理数据的地方)与存储侧(在其中,数据通常存储在硬盘驱动器(hard disk drive,hdd)和/或固态驱动器(solid state drive,ssd)中)之间的(与原始数据集的大小相似的)网络i/o开销;
[0009]-计算引擎集群的计算和存储器资源(例如dram)的使用相似于初始数据集的大小;以及
[0010]-大量执行次数。
[0011]
在现有技术中已经提出了一些解决这个问题的不同技术。这样的现有技术包括个体的特征,例如在用户之间共享高速缓存数据、分布式多层高速缓存、中间数据和与平台无关的设计。
技术实现要素:
[0012]
下面将描述各种示例,以便以简化形式引入选择的概念,这些概念在具体实施方式中还会被描述。发明内容并非旨在限制所要求保护的主题的范围。
[0013]
现有技术的高速缓存技术不包括提升处理效率的方案,如语义感知、自适应分区和数据跳过元数据。本文描述的分布式语义感知高速缓存设计则包括这样的提升处理效率方案,并且还可以:
[0014]
在用户之间共享(即内容可由许多用户访问);
[0015]
分布式(利用来自多个服务器的高速缓存空间);
[0016]
多层(使用多个层(例如存储器和磁盘)来存储数据);
[0017]
语义感知(包括关于内容的元数据,并自动使用所述元数据来提高性能);
[0018]
多模态(为所有三种类型的交互即重分区、数据跳过元数据和中间数据高速缓存提供接口);以及
[0019]
与平台无关(不取决于特定平台)。
[0020]
在示例实施例中,分布式语义感知高速缓存利用具有简单加载/存储应用编程接口(application programming interface,api)的基线分布式多层共享高速缓存进行操作。分布式语义感知高速缓存公开了新的语义感知api,所述api允许所述分布式语义感知高速缓存自动使用内容来优化传入的作业。转换器模块可确保应用用户不必协调复杂且精密的计算操作,即可相对简单地理解功能(如重分区数据、创建数据跳过元数据和高速缓存中间结果)。分布式语义感知高速缓存还能够在用户之间有效地共享内容,因为它维护高速缓存内容的具体知识,并可以在必要时决定如何以及何时重用所述内容。此外,优化器模块确保计划得到完全优化,以利用分布式语义感知高速缓存的内容。
[0021]
根据本发明的第一方面,提供了一种在分布式数据分析平台上执行数据分析过程的方法,所述分布式数据分析平台在用户之间共享高速缓存数据。所述方法包括:接收来自用户的语义感知存储命令,将用于执行来自用户的语义感知存储命令的有向无环图(directed acyclic graph,dag)计划转换成转换后的dag计划以便由分布式共享高速缓存执行,以及执行至少包括最终存储命令的所述转换后的dag计划,并将所述转换后的dag计划的执行结果存储至所述分布式共享高速缓存。
[0022]
根据本发明的第二方面,提供了一种分布式语义感知高速缓存,包括存储可以由
至少两个用户共享的数据的分布式共享高速缓存和语义感知高速缓存管理器。所述语义感知高速缓存管理器包括转换器模块,所述转换器模块将用于执行来自用户的语义感知存储命令的有向无环图(directed acyclic graph,dag)计划转换成转换后的dag计划以便由分布式共享高速缓存执行。所述分布式共享高速缓存接收并存储最终存储命令和转换后的dag计划的执行结果。
[0023]
根据本发明的第三方面,提供了一种分布式语义感知高速缓存系统,包括存储可以由至少两个用户共享的数据的分布式共享高速缓存、语义感知高速缓存管理器和分布式计算引擎。所述语义感知高速缓存管理器包括转换器模块,所述转换器模块将用于执行来自用户的语义感知存储命令的有向无环图(directed acyclic graph,dag)计划转换成转换后的dag计划以便由分布式共享高速缓存执行。所述分布式计算引擎执行转换后的dag计划,并将最终存储命令和所述转换后的dag计划的执行结果存储在所述分布式共享高速缓存中。
[0024]
在上述任一方面的第一实现方式中,在转换dag计划之前,将dag计划变换成语义高速缓存格式,并且将转换后的dag计划变换成执行转换后的dag计划的分布式计算引擎的格式。
[0025]
在上述任一方面的第二实现方式中,来自分布式共享高速缓存的语义感知存储命令基于关于分布式共享高速缓存中存储的数据的知识,并且使用关于分布式共享高速缓存中存储的数据的知识来优化转换后的dag计划的执行。
[0026]
在上述任一方面的第三实现方式中,执行加载命令,所述加载命令通过以下方式来优化来自用户的dag计划:在来自分布式共享高速缓存的加载命令下使用分布式共享高速缓存中存储的数据来更新所述转换后的dag计划,从而形成经优化的dag计划。
[0027]
在上述任一方面的第四实现方式中,每当语义感知存储命令被执行时,包括dag计划的语义感知高速缓存加载命令被发送到分布式共享高速缓存。在形成经优化的dag计划后,返回所述经优化的dag计划以用于执行,所述包括加载命令的经优化的dag计划由分布式计算引擎执行。然后,所述经优化的dag计划的执行结果被存储至所述分布式共享高速缓存。
[0028]
在上述任一方面的第五实现方式中,在转换之前将经优化的dag计划变换成语义高速缓存格式,并且将经优化的dag计划变换成执行经优化的dag计划的分布式计算引擎的格式。
[0029]
在上述任一方面的第六实现方式中,所述转换后的dag计划通过以下方式来更新:审查经高速缓存的中间数据,以确定以下中的至少之一:(1)是否存在可以通过直接从所述分布式共享高速缓存加载数据来修剪(prune)的dag计划的分支,(2)所述分布式共享高速缓存中是否存在可以消除分区或洗牌(shuffle)阶段的数据的重分区,或(3)基于数据跳过元数据,是否存在可以消除分区的随后操作。
[0030]
在上述任一方面的第七实现方式中,分布式共享高速缓存包括多个层,并且驱逐命令从用户接收,以指定用来存储对应内容的分布式共享高速缓存的层和输出路径。作为响应,向所述分布式共享高速缓存发送与驱逐命令对应的删除命令,以及销毁所述分布式共享高速缓存中关于对应内容的语义信息。
[0031]
在上述任一方面的第八实现方式中,通过当将语义感知存储命令变换成转换后的
dag计划时遵循语义感知存储命令的语义来转换dag计划。
[0032]
在上述任一方面的第九实现方式中,接收到的语义感知存储命令包括自适应分区命令、数据跳过元数据命令或中间数据命令中的至少之一,在所述自适应分区命令下,数据基于工作负载特征被动态地结构化,在所述数据跳过元数据命令下,当消除数据分区不影响转换后的dag计划的执行结果时,所述数据分区被修剪,在所述中间数据命令下,数据被重复用于另一个操作。
[0033]
在上述任一方面的第十实现方式中,分布式共享高速缓存包括多个层,并且当接收到的语义感知存储命令包括自适应分区命令时,错误!引用源未找到。
[0034]
在上述任一方面的第十一实现方式中,分布式共享高速缓存包括多个层,并且当接收到的语义感知存储命令包括数据跳过元数据命令时,构建转换后的dag计划,其在被执行时获取输入数据,创建关于数据跳过元数据命令中指定的属性的相关元数据,并将相关元数据存储在数据跳过元数据命令中指定的位置和存储器层。
[0035]
在上述任一方面的第十二实现方式中,分布式共享高速缓存包括多个层,并且当接收到的语义感知存储命令包括来自用户的中间数据命令和dag计划时,执行来自用户的dag计划,并再次将结果存储到分布式共享高速缓存的指定位置和存储器层。
[0036]
所述方法可以被执行,而计算机可读介质上的指令可以由装置处理,并且所述方法和计算机可读介质上的指令的另外的特征是由所述装置的功能实现的。此外,针对每个方面及其实现方式提供的解释同样适用于其他方面和对应的实现方式。不同的实施例可以在硬件、软件或其任何组合中实现。此外,上述任一个示例可以与上述其他示例中的任一个或多个组合以在本发明范围内创建新实施例。
附图说明
[0037]
在不一定按比例绘制的附图中,相像的数字可以在不同视图中描述类似组件。附图通过示例而非限制的方式一般地示出了在本文中描述的各种实施例。
[0038]
图1示出了分布式计算引擎的示例。
[0039]
图2示出了图1中分布式计算引擎的示例执行计划,其中假设分布式计算引擎将数据集划分成四个不同的分区。
[0040]
图3示出了自适应分区的示例。
[0041]
图4示出了数据跳过的示例。
[0042]
图5示出了中间数据高速缓存的示例。
[0043]
图6示出了spark分布式多层高速缓存。
[0044]
图7示出了alluxio分布式多层共享高速缓存。
[0045]
图8示出了示例实施例中的分布式语义感知高速缓存。
[0046]
图9是示出图8的分布式语义感知高速缓存的存储协议的流程图。
[0047]
图10示出了示例实施例中的从图8的分布式语义感知高速缓存中加载数据,以供第二用户使用。
[0048]
图11是示出图8的分布式语义感知高速缓存的加载协议的流程图。
[0049]
图12示出了示例实施例中的转换器模块的示例实现方式。
[0050]
图13示出了示例实施例中的优化器模块的示例实现方式。
[0051]
图14是示出用于执行根据示例实施例的方法的电路的方框图。
具体实施方式
[0052]
首先应当理解,尽管下面提供了一个或多个实施例的说明性实现方式,但关于图3至图14描述的公开系统和/或方法可以使用任何数量的技术来实现,无论是当前已知的还是存在的。本发明绝不限于下文所说明的包括本文所说明和描述的示例性设计和实现方式的说明性实现方式、附图和技术,而是可以在所附权利要求书的范围以及其等效部分的完整范围内修改。
[0053]
在一个实施例中,本文描述的功能或算法可以在软件中实现。所述软件可以包括本地或联网的计算机可读介质或计算机可读存储设备例如一个或多个非瞬时性存储器或其他类型的基于硬件的存储设备中存储的计算机可执行指令。此外,此类功能与模块对应,所述模块可以是软件、硬件、固件或其任何组合。根据需要,可以在一个或多个模块中执行多个功能,所描述的实施例仅仅是示例。软件可以在在计算机系统例如个人计算机、服务器或其他计算机系统上运行的数字信号处理器、专用集成电路(application specific integrated circuit,asic)、微处理器或其他类型的处理器上执行,从而将这种计算机系统转变成经特定编程的机器。
[0054]
现有的大型数据分析平台如spark
tm
、hadoop
tm
、tensorflow
tm
和dryad
tm
通常使用有向无环图(directed acyclic graph,dag)模型来定义用户作业,并且结合如下高速缓存,其实现个体的特征,如用户之间的共享高速缓存数据、分布式多层高速缓存、中间数据和与平台无关的设计。这些系统的共同点是牺牲了一些额外的存储器(dram,主)或磁盘(hdd/ssd,辅)空间,以获得更好的整体性能。如本领域技术人员所知,高速缓存是存储数据以实现更快访问的存储器设备(例如,减少主存储器访问的片上cpu高速缓存、高速缓存结果以减少磁盘访问的硬盘驱动器中的存储器芯片等)。多层高速缓存可以包括不同类型的数据存储设备,如动态随机存取存储器(dynamic random access memory,dram)、硬盘驱动器(hard disk drive,hdd)和固态驱动器(solid state drive,ssd),其包括多种不同大小和速度的物理存储器,以减少较慢的数据访问。高速缓存可以用来存储此额外数据,因为它不需要被复制或持久化以实现容错。如果在高速缓存中找不到内容,则计算引擎可以恢复到基线策略,这虽然低效但不会出错。
[0055]
提高高速缓存效率的一种方法是自适应分区。自适应分区是基于工作负载特征使数据动态地重新结构化的过程。例如,如果有许多作业具有涉及温度属性值的过滤器操作(如图1至图2示例所示),则基于温度属性值在分区之间分类(sort)和拆分该数据是有益的。此方法可见于图3中,其示出了将初始分区200(p1、p2、p3、p4)重新分类成与不同温度范围对应的新分区310(p1')、320(p2')、330(p3')和340(p4')。可以取决于大小和硬件使用额外的存储器或存储空间来存储这些新分区310至340。当类似上述示例中的作业被执行时,计算引擎仅加载p1
′
分区310,所述分区是在称为分区修剪的过程中唯一包含具有热温度值的记录210的分区。在该示例中,过滤操作350和映射操作360仍然在计算侧执行,因为对于加载的分区中的p1
′
分区310,仍然可以存在最终被过滤掉的记录。由于不需要对分区320、330或340执行过滤操作370和映射操作380,因此省去了相关的处理操作。如图3所示,较小部分的数据从存储被加载并通过网络传输(本例中为四分之一),计算引擎以较少的计算和
存储器总资源利用较少的任务(本例中为一个而不是四个),而且大多数情况下的执行速度要快得多。然而,由于重分区数据而产生的额外开销将体现在消耗相当大的额外空间和计算资源上。
[0056]
另一种用于提高高速缓存效率的技术是数据跳过。在数据跳过中,存储侧(或计算侧)维护关于每个分区的从属性值(而不是主分区属性)的信息。用于此类从属性值的常见数据结构包括:
[0057]
1.每个分区的数字属性的最小值/最大值;
[0058]
2.列出单个分区中类别属性的所有值;以及
[0059]
3.单个分区内属性值的布鲁姆过滤器。
[0060]
如果数据跳过信息确保消除分区不会导致不同的结果,则分区可以被修剪。在图4所示的示例中,假设热温度值的所有记录(400)都在p1分区410和p2分区420中。然后,使用数据跳过元数据的列表,计算引擎可以安全地检测到p3分区430或p4分区440中没有热温度值,因此,它可以修剪这些分区。在该示例中,过滤操作450和映射操作460仍然在计算侧针对p1分区410和p2分区420执行。由于不需要对修剪后的分区430和440执行过滤操作470和映射操作480,因此省去了相关的处理操作。
[0061]
另一种用于提高高速缓存效率的技术是中间数据高速缓存,其中,计算引擎存储操作的结果。然后,如果包含许多相同函数的相同或类似作业被执行,则可以重复使用存储的结果。在图5所示的示例中,当具有指定过滤操作510(过滤热温度记录)的第一作业被执行时,过滤操作510的相应结果520存储在存储器或存储530中。然后执行作业的其余部分,包括映射操作540。当具有相同过滤操作510的另一个作业被执行时,所述作业可以跳过过滤操作510,并从存储530执行初始数据加载。高速缓存的结果520可以直接加载而不执行过滤操作510,从而对于重复的过滤操作省去了对过滤操作510的处理。
[0062]
spark高速缓存提供了另一种高速缓存解决方案,包括分布式多层高速缓存,但该方案存在一些限制。图6总结了spark高速缓存技术。如图6所示,在spark高速缓存中,分布式多层高速缓存610不在用户620与用户630之间共享。相反,分布式计算引擎640为用户620执行过滤操作650,并将过滤操作650和过滤结果660(例如,键值和内容)存储在分布式多层高速缓存610中,而分布式计算引擎670为用户630执行过滤操作680,并且在682处将过滤结果加载到分布式多层高速缓存690中,或者执行映射操作684。因此,在spark高速缓存中,用户620和用户630不能从彼此的高速缓存内容中受益,且每个用户进程必须从一开始重新运行。
[0063]
alluxio高速缓存提供了另一种高速缓存解决方案,包括分布式多层共享高速缓存。但是,分布式多层共享高速缓存本身不提供关于内容的语义信息,因此,除非用户了解关于内容的(由他们初始创建的)起源的知识并共享此类信息,否则该内容无法被利用。例如,一个用户将发送文件位置,并通过外部通道向第二个用户提供关于文件内容的信息。错误!引用源未找到总结了alluxio高速缓存技术。如图7所示,分布式计算引擎710为用户730执行过滤操作720,并将过滤后的数据和指向过滤后的数据的指针740存储在分布式多层共享高速缓存750中。类似地,分布式计算引擎760为用户780执行过滤操作770,并且在772处将过滤结果加载到分布式多层共享高速缓存750中,或者执行映射操作774。虽然用户730和用户780都可以访问存储在分布式多层共享高速缓存750中的数据,但指向过滤后的数据的
指针740必须由用户730和用户780手动共享,以便用户730和用户780从彼此的高速缓存内容中受益。
[0064]
本文描述的分布式语义感知高速缓存结合了来自上述高速缓存技术的特征,同时还提供了与标准加载/存储api相比不同的应用编程接口(application programming interface,api)。具体地,分布式语义感知高速缓存包括语义感知api,所述api将高速缓存内容公开给相应的用户,由此相应的用户可以自动使用关于高速缓存内容的知识来优化传入的作业。因此,“语义高速缓存”包括多层高速缓存上方的数据接口层,其允许使用元数据改进查询执行。分布式语义感知高速缓存通过api向用户提供关于高速缓存内容的信息,以便根据需要有效地搜索和/或再现内容。在示例实施例中,语义感知api公开操作,包括:
[0065]
存储
→
(重分区(源路径,属性,输出路径,层),
[0066]
数据跳过元数据(源路径,属性,输出路径,层),
[0067]
中间数据(输入dag,输出路径,层))
[0068]
加载
→
优化(输入dag)
[0069]
驱逐
→
删除(路径,层)。
[0070]
语义感知api可据此用相应的语义感知命令替换传统的高速缓存存储操作,所述命令传递语义信息,并实现包括上述三种技术即自适应分区、数据跳过元数据和中间数据中的至少一种的技术。
[0071]
错误!不是有效的书签自引用。示出了示例实施例中的分布式语义感知高速缓存。在本实施例中,应用用户810经由分布式计算引擎820向无状态语义高速缓存客户端插件模块830发送存储命令,所述插件模块将dag计划从本地分布式计算引擎820的格式变换成分布式语义感知高速缓存840的语义高速缓存格式(例如,在中间数据命令被分布式语义感知高速缓存840使用的情况下)。换句话说,语义高速缓存客户端插件模块830将描述特定作业的本地分布式计算引擎820(例如spark)的dag计划变换成分布式语义感知高速缓存840的dag计划,其可以具有用于描述作业的不同数据结构(“dag”)。分布式语义感知高速缓存840包括语义高速缓存管理器850,所述语义高速缓存管理器注册到语义高速缓存客户端插件模块830,并且包括转换器模块852和优化器模块854,所述转换器模块和优化器模块负责变换dag计划以受益于分布式语义感知高速缓存840的内容(参见下方图13的描述)。语义高速缓存管理器850产生分布式计算引擎820可以执行的dag计划。转换器模块852负责将来自用户810的存储命令变换成分布式计算引擎820可以执行的dag计划(例如重分区)。分布式计算引擎820执行得出的dag,并将结果存储到基线分布式多层共享高速缓存842。另一方面,优化器模块854可以将原始dag变换成经优化的dag,所述经优化的dag利用来自在分布式多层共享高速缓存842之上工作的分布式语义感知高速缓存840的潜在有用内容来改进经由另一语义高速缓存客户端插件模块880到另一用户870的分布式计算引擎860的加载过程,该另一语义高速缓存客户端插件模块将经优化的dag计划从分布式语义感知高速缓存840的格式变换成本地分布式计算引擎860的格式。下面将参照图10和图11描述关于加载过程的更多细节。
[0072]
图9是包括步骤910、920、930、940和950的流程图,示出了图8的分布式语义感知高速缓存的存储协议900。
[0073]
在910处,分布式计算引擎820将用户发出的存储命令从用户810传播到语义高速
缓存客户端插件模块830。
[0074]
在920处,当存储命令包括dag计划(如在使用中间数据命令的情况下)时,语义高速缓存客户端插件模块830将dag计划从本地分布式计算引擎格式变换成语义高速缓存格式。然后,所述命令被传播到语义高速缓存管理器850的转换器模块852。
[0075]
在930处,语义高速缓存转换器模块852将存储请求转换成dag计划(“转换后的dag计划”),其解释要如何由分布式计算引擎820执行所述存储请求。dag计划包括来自分布式多层共享高速缓存842的存储命令,这些命令被发回语义高速缓存客户端插件模块830。图12中示出了简单的示例。
[0076]
在940处,语义高速缓存客户端插件模块830执行dag计划的(根据步骤920的)从语义高速缓存管理器850的格式到本地分布式计算引擎820的格式的反向变换。
[0077]
在950处,分布式计算引擎820执行dag计划连同来自分布式语义感知高速缓存840的最终存储命令,并将结果存储在分布式多层共享高速缓存842中。
[0078]
分布式语义感知高速缓存840还可以用来自分布式语义感知高速缓存840的api的优化命令来替换传统的加载语义。所述加载命令(与存储命令相反)不应由应用用户触发,但所述加载应被视为是对由用户810提供的原始dag计划的优化。图11是包括步骤1110、1120、1130、1140和1150的流程图,示出了图8的分布式语义感知高速缓存的加载协议1100。
[0079]
图10示出了在示例实施例中从分布式语义感知高速缓存840加载数据以供第二用户870使用。当第二用户870的分布式计算引擎860尝试从分布式语义感知高速缓存840加载数据时,用户810提供的初始dag可以被优化(例如,使用相同的过滤操作来消除过滤操作和通过从高速缓存加载的初始数据加载),并由第二用户870用于生成综合执行计划。在这种情况下,分布式计算引擎860通过对应的语义高速缓存客户端插件模块880询问分布式语义感知高速缓存840是否可以使用高速缓存内容进一步优化dag。优化器模块854将原始dag变换成利用来自分布式语义感知高速缓存840的潜在有用内容的经优化的dag。当分布式计算引擎860通过潜在地从基线分布式多层共享高速缓存842加载有用数据来执行经优化的dag计划(在其本身应用其他潜在优化之后)时,来自分布式多层共享高速缓存842的潜在加载命令被包括在分布式计算引擎860中并由其执行。如果未能或无法优化数据,则可以使用初始dag计划而不是创建经优化的dag计划。
[0080]
图11是包括步骤1110、1120、1130、1140和1150的流程图,示出了图8的分布式语义感知高速缓存的加载协议1100。
[0081]
在1110处,每当新作业被执行时,分布式计算引擎860向语义高速缓存客户端插件模块880发送语义高速缓存加载命令(dag)。
[0082]
在1120处,语义高速缓存客户端插件模块880将dag计划从本地分布式计算引擎860的格式变换成分布式语义感知高速缓存840的格式。然后,将所述加载命令传播到分布式语义感知高速缓存840的优化器模块854。
[0083]
在1130处,分布式语义感知高速缓存840的优化器模块854通过变换从分布式计算引擎860接收的dag计划来优化它并将经优化的dag计划返回给语义高速缓存客户端插件模块880以用于执行。可以修改经优化的dag计划以包含来自分布式多层共享高速缓存842的原始加载命令。
[0084]
在1140处,语义高速缓存客户端插件模块880进行经优化的dag计划的(根据步骤
1120的)从语义高速缓存管理器850的格式到分布式计算引擎860的格式的反向变换。
[0085]
在1150处,分布式计算引擎860执行经优化的dag计划连同来自分布式语义感知高速缓存840的潜在加载命令,并将结果加载到分布式多层共享高速缓存842中。
[0086]
驱逐命令非常简单,并且与存储命令类似。对于驱逐命令,应用用户指定用来存储对应内容的存储器层和输出路径。分布式计算引擎820通过语义高速缓存客户端插件模块830将该信息发送到语义高速缓存管理器850。作为响应,语义高速缓存管理器850向分布式多层共享高速缓存842发送对应的删除命令,并销毁内部维护的关于内容的语义信息。
[0087]
在语义高速缓存管理器850的示例实施例中,转换器模块852经由分布式计算引擎820接受传入的应用存储命令,并将命令变换成遵循命令语义并可在分布式计算引擎中执行的dag计划。错误!引用源未找到。指定输入dag、输出路径和存储器层,转换器模块852指示分布式计算引擎820运行输入dag计划,然后在1280处将其结果再次存储到分布式多层共享高速缓存842的指定位置和层。高速缓存数据可以在跳过数据的初始加载时使用。
[0088]
在语义高速缓存管理器850的示例实施例中,优化器模块854负责变换dag计划以受益于分布式语义感知高速缓存840的内容。优化器模块854的示例实现方式如错误!引用源未找到。ig.13所示。
[0089]
dag可以被表示为交织(或非交织)有向树的集合,其中根是没有传入边缘的节点。在dag中,保证至少有一个节点没有传入边缘。因此,每棵树都可以单独拆分和分析(为不同的子作业)。在图13的示例中,映射是根节点,而加载是叶子节点,用于优化目的。在图13中,箭头具有相反的方向,以确定执行顺序。如图13所示,优化器模块854首先在1302处递归地查看从根1300开始的树,以查看是否存在可以通过直接从基线分布式多层共享高速缓存842加载数据而修剪的树(操作)的任何分支(又名有向树)(node:=plan.root)。
[0090]
然后,优化器模块854在1304和1306处查看树中的当前节点,以查看当前节点是参与洗牌操作的洗牌节点还是参与过滤操作的过滤节点。如本领域技术人员所知,一些操作如映射、过滤和更多的操作会导致任务之间产生窄依赖关系(一对一通信模式)。通常,这些操作捆绑在一起,并由同一进程执行。像连接(join)、reducebykey、groupbykey和更多的操作会在不同任务之间产生宽依赖关系(多对多通信模式)。传统上,这种数据交换被表示为在一个或多个洗牌节点上实现的洗牌阶段。需维护洗牌操作的属性,以用于重分区和数据跳过元数据优化以及重置过滤属性,因为它们由于在1310处的洗牌而不再相关。过滤节点可以在1308处维护过滤属性。
[0091]
优化器模块854还检查当前节点是否可以被来自基线分布式多层共享高速缓存842的在1312处的中间数据内容替换。在1314、1316和1318处执行递归调用,以优化当前节点的每个子节点的dag。
[0092]
如果在1320处发现中间数据,则优化器模块854在1324处用来自基线分布式多层共享高速缓存842的加载替换当前节点。
[0093]
如果在1322处当前节点不是叶子节点(来自数据源的加载),则在1326处返回当前节点。然后,优化器模块854在1326处寻找重分区和数据跳过元数据。
[0094]
如果在1328处发现具有过滤或洗牌属性(分别在1310和1308中列出)的当前节点的重分区,则优化器模块854在1332处用来自基线分布式多层共享高速缓存842的新重分区替换叶子节点(数据源)。
[0095]
如果没有找到重分区,并且在1330处找到具有过滤属性(在1308中列出)的当前节点的数据跳过元数据,则优化器模块854在1334处用新加载替换叶子节点(数据源),该新加载根据来自基线分布式多层共享高速缓存842的数据跳过元数据来跳过分区读取。
[0096]
最后,优化器模块854在1336处返回修改后的优化树。
[0097]
在替代实施例中,定制的驱逐模块可用于使用户能够协调删除操作。用户可以决定当高速缓存已满时自动删除(驱逐)哪些数据,以便用户可以直接从分布式语义感知高速缓存840删除数据。在这样的实施例中,可以实现自动过程,以免除用户管理高速缓存的这一方面的操作,但因此可能会做出次优的决策。
[0098]
如本文所述,分布式语义感知高速缓存840的示例实施例包括多个存储器层。例如,分布式语义感知高速缓存840可以是包括存储器(例如hdd)和磁盘(例如ssd)的两层高速缓存。然而,分布式语义感知高速缓存840也可以更精密和复杂。例如,分布式语义感知高速缓存840可以包括用户可选择的计算侧的存储器、计算侧的磁盘、存储侧的存储器和存储侧的磁盘。这使得用户可以更灵活地微调他们的决策,但却会使数据的编排更加复杂和困难。
[0099]
本领域技术人员应当理解,本文描述的分布式语义感知高速缓存与传统高速缓存相比具有许多好处。例如,本文描述的分布式语义感知高速缓存加载少得多的数据(节省存储i/o处理),在存储侧与计算侧之间传输的数据要少得多(节省网络i/o处理),并且利用更少的处理器和存储器(例如dram)资源来实现分布式计算引擎,最终实现了总体成本较低的架构。同时,执行时间也更快。此外,与传统系统不同,分布式语义感知高速缓存是共享的,具有改进的api,并且是语义感知的。
[0100]
更概括地说,本文描述的分布式语义感知高速缓存具有可以在不同计算集群之间有效共享内容的设计和api。写入(存储)协议可确保用户写入更少的代码并避免计算编排开销,而读取(加载)协议可确保计算引擎的代码得到优化,并在存储i/o、网络i/o、cpu资源利用率和存储器空间利用率方面具有优势。
[0101]
图14示出了适于实现本文公开的方法的一个或多个实施例的通用计算机1400。例如,图14中的计算机1400可以在数据分析框架(例如,spark
tm
、hadoop
tm
、tensorflow
tm
和dryad
tm
)上实现,并且上述组件可以在任何通用网络组件上实现,例如具有足够处理能力、存储器资源和网络吞吐能力的计算机1400上实现,以处理置于其上的工作负载。计算机1400包括处理器1410(其可称为中央处理器单元或cpu),其与包括辅助存储1420、只读存储器(read-only memory,rom)1430、随机存取存储器(random access memory,ram)1440、i/o设备1450和网络连接设备1460的存储器设备通信。在示例实施例中,网络连接设备1460还将处理器1410连接到客户端侧数据分析驱动模块1470,所述客户端侧数据分析驱动模块管理使用本文所述的分布式语义感知高速缓存的数据分析过程。处理器1410可以实现为一个或多个cpu芯片,也可以是一个或多个asic的一部分。
[0102]
辅助存储1420通常由一个或多个磁盘驱动器或磁带驱动器组成,并且用于数据的非易失性存储,并且如果ram 1440不足以容纳所有工作数据(例如从映射任务接收的数据),则用作溢出数据存储设备。辅助存储1420可以用来存储当这些程序被选择以用于执行时加载到ram 1440中的程序。rom 1430用来存储在程序执行期间读取的指令,也许还用来存储数据。rom 1430可以是非易失性存储器设备,通常相对于辅助存储1420的较大存储器
容量,其具有更小的存储器容量。ram 1440用来存储易失性数据,也许还用来存储指令。对rom 1430和ram 1440的访问通常比对辅助存储1420的访问快。
[0103]
应当理解,计算机1400可以执行来自存储计算机可读指令的计算机可读非瞬时性介质和耦接到存储器的一个或多个处理器的指令,并且当计算机可读指令被执行时,计算机1400用于执行结合图3至图13描述的本发明中的方法步骤和操作。计算机可读非瞬时性介质包括所有类型的计算机可读介质,包括磁性存储介质、光存储介质、闪存介质和固态存储介质。
[0104]
还应理解,可以在一个或多个服务器或数据库中安装并与一个或多个服务器或数据库一起销售包括一个或多个计算机可执行指令的软件,所述一个或多个计算机可执行指令便利于如上文结合本发明的任何一个步骤或所有步骤所描述的处理和操作。替选地,可以通过符合本发明的方式获得软件并将软件加载到一个或多个服务器或一个或多个数据库中,包括通过物理介质或分发系统获得软件,包括例如从软件创建者拥有的服务器或从软件创建者未拥有但使用的服务器获得软件。例如,可以将软件存储在服务器中以通过互联网分发。
[0105]
此外,本领域技术人员应理解,本发明在其应用方面不限于在说明书中阐述或附图中示出的组件的构造和布置细节。本文的实施例能够适用其他实施例,并且能够以各种方式实践或执行。此外,应理解,本文中使用的措辞和术语是为了描述目的,不应视为限制性的。本文中使用的“包括”、“包含”或“具有”及其变体旨在包括涵盖其后列举的项目及其等效物以及其他项目。
[0106]
可以至少部分地在数字电子电路、模拟电子电路中,或计算机硬件、固件、软件或其组合中实现根据所说明的实施例使用的说明性设备、系统和方法的组件。例如,这些组件还可以实现为有形地体现于信息载体中或机器可读存储设备中的计算机程序产品例如计算机程序、程序代码或计算机指令,以由数据处理装置例如可编程处理器、计算机或多台计算机执行,或用于控制数据处理装置例如可编程处理器、计算机或多台计算机的操作。
[0107]
计算机程序可以用任何形式的编程语言——包括编译语言或解释语言——编写,并且可以部署成任何形式,包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其他单元。可以将计算机程序部署成在一台计算机中或多台计算机中在一个站点处执行,也可以分布在多个站点处并通过通信网络互连。此外,用于实现本文描述的系统和方法的功能程序、代码和代码段可以很容易被本发明所属领域的程序员理解为在本发明的范围内。与说明性实施例相关联的方法步骤可以由一个或多个可编程处理器执行,从而执行计算机程序、代码或指令来执行功能(例如,对输入数据进行操作和生成输出)。方法步骤也可以由专用逻辑电路执行,并且装置可以实现为专用逻辑电路,例如现场可编程门阵列(field programmable gate array,fpga)或asic。
[0108]
结合本文所公开实施例描述的各种说明性逻辑块、模块和电路可以使用通用处理器、数字信号处理器(digital signal processor,dsp)、asic、fpga或其他可编程逻辑设备、分立门或晶体管逻辑、分立硬件组件或它们为执行本文描述的功能而设计的任何组合来实现或执行。通用处理器可以是微处理器,但是在替代方案中,该通用处理器也可以是任何传统的处理器、控制器、微控制器或状态机。处理器也可以实现为计算设备的组合,例如dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp核、或任何其他这样的
配置。
[0109]
例如,适合执行计算机程序的处理器包括通用和专用微处理器两者、以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者中接收指令和数据。计算机的元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机还包括一个或多个用于存储数据的大容量存储设备例如磁盘、磁光盘或光盘,或者可操作地被耦接以从所述大容量存储设备接收数据和/或将数据传输给所述大容量存储设备。适于体现计算机程序指令和数据的信息载体包括各种形式的非易失性存储器,例如,包括半导体存储器设备,例如电可编程只读存储器或电可编程rom(electrically programmable read-only memory,eprom)、电可擦除可编程rom(electrically erasable programmable rom,eeprom)、闪存设备以及数据存储盘(例如,磁盘、内置硬盘、或可移动磁盘、磁光盘、光盘rom(compact disc rom,cd-rom)或数字多功能光盘rom(digital versatiledisc rom,dvd-rom))。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路。
[0110]
本领域技术人员应当理解,可以使用多种不同的技术和技术方法中的任何一种来表示信息和信号。例如,上文描述中可以引用的数据、指令、命令、信息、信号、比特、符号和芯片可以由电压、电流、电磁波、磁场或磁粒、光场或光粒、或其任何组合表示。
[0111]
本领域技术人员还应当理解,结合本文公开的实施例描述的各种说明性逻辑块、模块、电路和算法步骤可以实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种互换性,各种说明性组件、块、模块、电路和步骤已经在上文中大体上根据它们的功能进行了描述。这种功能是作为硬件还是软件实现,取决于施加于整个系统的特定应用和设计限制。本领域技术人员可以以不同的方式针对每个特定应用实现所描述的功能,但这种实现决策不应被解释为导致偏离本发明的范围。软件模块可以驻留在随机存取存储器(random access memory,ram)、闪存、rom、eprom、eeprom、寄存器、硬盘、可移动磁盘、cd-rom或本领域已知的任何其他形式的存储介质中。示例存储介质耦接到处理器,使得处理器可以从存储介质读取信息,并将信息写入存储介质。在替代方案中,存储介质可以与处理器成一个整体。换句话说,处理器和存储介质可以驻留在集成电路中,也可以实现为分立组件。
[0112]
如本文所述,“机器可读介质”是指能够临时或永久存储指令和数据的设备,并且可以包括但不限于随机存取存储器(random-access memory,ram)、只读存储器(read-only memory,rom)、缓冲存储器、闪存、光介质、磁性介质、高速缓存存储器、其他类型的存储(例如eeprom)、以及它们的任何合适的组合。术语“机器可读介质”应被视为包括能够存储处理器指令的单个介质或多个介质(例如,集中式或分布式数据库或关联的高速缓存和服务器)。术语“机器可读介质”还应被视为包括能够存储用于由一个或多个处理器执行的指令的任何介质或多个介质的组合,使得当由一个或多个处理器执行时,指令使得一个或多个处理器执行本文描述的任何一个或多个方法。因此,“机器可读介质”是指单个存储装置或设备、以及包括多个存储装置或设备的“基于云的”存储系统或存储网络。本文使用的术语“机器可读介质”不包括信号本身。
[0113]
虽然上文详细描述了几个实施例,但也可以进行其他修改。例如,在图中描述的逻辑流程不需要所示的特定顺序或连续顺序来达到期望的结果。可以向所描述的流程提供其
他步骤或消除所描述的流程中的步骤,并可以向所描述的系统添加其他组件或移除所描述的系统的组件。其他实施例可以在所附权利要求书的范围内。
技术特征:
1.一种在用户之间共享高速缓存数据的分布式数据分析平台上执行数据分析过程的方法,其特征在于,所述方法包括:接收来自用户的语义感知存储命令;由一个或多个处理器将用于执行来自所述用户的语义感知存储命令的有向无环图(dag)计划转换成转换后的dag计划以便由分布式共享高速缓存执行;以及由所述一个或多个处理器:执行所述转换后的dag计划,所述转换后的dag计划至少包括最终存储命令;并将所述转换后的dag计划的执行结果存储至所述分布式共享高速缓存。2.根据权利要求1所述的方法,其特征在于,还包括:在转换所述dag计划之前,将所述dag计划变换成语义高速缓存格式;以及将所述转换后的dag计划变换成执行所述转换后的dag计划的分布式计算引擎的格式。3.根据权利要求1或权利要求2所述的方法,其特征在于,来自所述分布式共享高速缓存的所述语义感知存储命令基于关于所述分布式共享高速缓存中存储的数据的知识,所述方法还包括使用关于所述分布式共享高速缓存中存储的数据的知识来优化所述转换后的dag计划的执行。4.根据权利要求1至3中任一项所述的方法,其特征在于,还包括:执行加载命令,所述加载命令通过以下方式来优化来自所述用户的所述dag计划:在来自所述分布式共享高速缓存的加载命令下使用所述分布式共享高速缓存中存储的数据来更新所述转换后的dag计划,以形成经优化的dag计划。5.根据权利要求4所述的方法,其特征在于,还包括:每当语义感知存储命令被执行时,向所述分布式共享高速缓存发送包括所述dag计划的语义感知高速缓存加载命令;在形成所述经优化的dag计划后,返回所述经优化的dag计划以用于执行;以及执行包括所述加载命令的所述经优化的dag计划,并将所述经优化的dag计划的执行结果存储至所述分布式共享高速缓存。6.根据权利要求5所述的方法,其特征在于,还包括在转换之前将所述经优化的dag计划变换成语义高速缓存格式,并将所述经优化的dag计划变换成执行所述经优化的dag计划的分布式计算引擎的格式。7.根据权利要求5或权利要求6所述的方法,其特征在于,所述转换后的dag计划的更新包括审查经高速缓存的中间数据,以确定以下中的至少之一:(1)是否存在能够通过直接从所述分布式共享高速缓存加载数据来修剪的所述dag计划的分支,(2)所述分布式共享高速缓存中是否存在能够消除分区或洗牌阶段的所述数据的重分区,或(3)基于数据跳过元数据,是否存在能够消除分区的随后操作。8.根据权利要求1至7中任一项所述的方法,其特征在于,所述分布式共享高速缓存包括多个层,所述方法还包括:从所述用户接收驱逐命令,以指定用来存储对应内容的所述分布式共享高速缓存的层和输出路径;向所述分布式共享高速缓存发送与所述驱逐命令对应的删除命令;以及销毁所述分布式共享高速缓存中关于所述对应内容的语义信息。9.根据权利要求1至8中任一项所述的方法,其特征在于,所述dag计划的转换包括通过
遵循所述语义感知存储命令的语义将所述语义感知存储命令变换成所述转换后的dag计划。10.根据权利要求1至9中任一项所述的方法,其特征在于,所接收到的语义感知存储命令包括自适应分区命令、数据跳过元数据命令或中间数据命令中的至少之一,在所述自适应分区命令下,数据基于工作负载特征被动态地结构化,在所述数据跳过元数据命令下,当消除数据分区不影响所述转换后的dag计划的执行结果时,所述数据分区被修剪,在所述中间数据命令下,数据被重复用于另一个操作。11.根据权利要求10所述的方法,其特征在于,所述分布式共享高速缓存包括多个层,并且当所述接收到的语义感知存储命令包括所述自适应分区命令时,构建dag计划作为所述转换后的dag计划,其在被执行时获取输入数据,根据所述自适应分区命令中指定的属性对所述输入数据进行分类,并将分类后的输入数据存储在所述自适应分区命令中指定的位置和存储器层中。12.根据权利要求10所述的方法,其特征在于,所述分布式共享高速缓存包括多个层,并且当所述接收到的语义感知存储命令包括所述数据跳过元数据命令时,构建dag计划作为所述转换后的dag计划,其在被执行时获取输入数据,创建关于所述数据跳过元数据命令中指定的属性的相关元数据,并将所述相关元数据存储在所述数据跳过元数据命令中指定的位置和存储器层中。13.根据权利要求10所述的方法,其特征在于,所述分布式共享高速缓存包括多个层,并且当所述接收到的语义感知存储命令包括来自所述用户的所述中间数据命令和所述dag计划时,执行来自所述用户的所述dag计划,并再次将结果存储到所述分布式共享高速缓存的指定位置和存储器层。14.一种分布式语义感知高速缓存,其特征在于,包括:分布式共享高速缓存,其存储能够由至少两个用户共享的数据;以及语义感知高速缓存管理器,其包括转换器模块,所述转换器模块将用于执行来自用户的语义感知存储命令的有向无环图(dag)计划转换成转换后的dag计划以便由所述分布式共享高速缓存执行,其中,所述分布式共享高速缓存接收并存储最终存储命令和所述转换后的dag计划的执行结果。15.根据权利要求14所述的分布式语义感知高速缓存,其特征在于,所述语义感知高速缓存管理器还包括优化器模块,所述优化器模块通过提供来自所述分布式共享高速缓存的语义感知存储命令来优化所述转换后的dag计划的执行,以形成经优化的dag计划以用于执行,所述语义感知存储命令基于关于所述分布式共享高速缓存中存储的数据的知识。16.根据权利要求15所述的分布式语义感知高速缓存,其特征在于,所述优化器模块在来自所述分布式共享高速缓存的加载命令下更新所述dag计划,以形成所述经优化的dag计划以用于执行。17.根据权利要求16所述的分布式语义感知高速缓存,其特征在于,所述分布式共享高速缓存每当语义感知存储命令被执行时接收包括所述经优化的dag计划的语义感知高速缓存加载命令,并且所述分布式共享高速缓存存储所述经优化的dag计划的执行结果。18.根据权利要求16或权利要求17所述的分布式语义感知高速缓存,其特征在于,所述
优化器模块通过以下方式来优化所述dag计划:审查经高速缓存的中间数据,以确定以下中的至少之一:(1)是否存在能够通过直接从所述分布式共享高速缓存加载数据来修剪的所述dag计划的分支,(2)所述分布式共享高速缓存中是否存在能够消除分区或洗牌阶段的所述数据的重分区,或(3)基于数据跳过元数据,是否存在能够消除分区的随后操作。19.根据权利要求14至18中任一项所述的分布式语义感知高速缓存,其特征在于,所述语义感知高速缓存包括应用编程接口,所述应用编程接口接收语义感知存储命令,所述语义感知存储命令包括自适应分区命令、数据跳过元数据命令或中间数据命令中的至少之一,在所述自适应分区命令下,数据基于工作负载特征被动态地结构化,在所述数据跳过元数据命令下,当消除数据分区不影响所述转换后的dag计划的执行结果时,所述数据分区被修剪,在所述中间数据命令下,数据被重复用于另一个操作。20.一种分布式语义感知高速缓存系统,其特征在于,包括:分布式共享高速缓存,其存储能够由至少两个用户共享的数据;语义感知高速缓存管理器,其包括转换器模块,所述转换器模块将用于执行来自用户的语义感知存储命令的有向无环图(dag)计划转换成转换后的dag计划以便由所述分布式共享高速缓存执行;以及分布式计算引擎,其执行所述转换后的dag计划,并将最终存储命令和所述转换后的dag计划的执行结果存储在所述分布式共享高速缓存中。
技术总结
提供了一种在用户之间共享高速缓存数据的分布式数据分析平台上执行数据分析过程的系统。所述系统从用户接收语义感知存储命令,将用于执行来自用户的语义感知存储命令的DAG计划转换成转换后的DAG计划以便由分布式多层共享高速缓存执行,并执行至少包括最终存储命令的所述转换后的DAG计划。所述转换后的DAG计划的执行结果存储至所述分布式多层共享高速缓存。所述转换后的DAG计划的执行可以通过以下方式来优化:审查经高速缓存的中间数据,以确定所述DAG计划的分支是否可以通过直接加载数据来修剪,数据的重分区是否可以消除分区或洗牌阶段,或者随后操作是否可以使用数据跳过索引消除分区。索引消除分区。索引消除分区。
技术研发人员:西奥多罗斯
受保护的技术使用者:华为技术有限公司
技术研发日:2021.01.26
技术公布日:2023/9/23
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:医疗用吸引器和医疗用吸引器用的罐体的制作方法 下一篇:用于支撑履带的滑块的制作方法