一种分布式数据向量化处理方法和装置的制造方法

文档序号:8512463阅读:511来源:国知局
一种分布式数据向量化处理方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种分布式数据向量化处理方法和装置。
【背景技术】
[0002]Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架,其支持在商品硬件构建的大型集群上运行的应用程序。Hadoop实现了名为MapReduce的编程范式:应用程序被分割成若干小部分,而每个部分都能在集群中的任意节点上执行或重新执行。此外,Hadoop还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。Hadoop使得应用程序与成千上万的独立计算的电脑能够进行PB级的数据通信。
[0003]MapReduce是Hadoop的一种计算框架,它允许软件将应用程序分成Map与Reduce两个阶段,Map阶段实现的函数用来把一组键值对映射成一组新的键值对,而Reduce阶段指定并发的Reduce (归纳)函数,对一个Map阶段输出的结果列表中的元素进行适当的合并。
[0004]Spark是和MapReduce框架类似的一种分布式计算框架,其采用轻量级的调度框架,并且使用内存来缓存中间结果,因此相对于MapReduce性能有一定的提升,但是其执行速度还是比较慢。
[0005]MapReduce的出现使得即使不懂并行计算的编程人员也可以在分布式系统上开发软件,但其执行效率却很低。MapReduce需要将一个计算任务分成多个Map任务和Reduce任务,多个任务之间的中间结果要写入磁盘,因此延时非常高。另外MapReduce是为运行长达数小时的批量作业而设计,而组成作业的每个任务的运行时间都是分钟级别,因此任务调度系统的设计是非常粗粒度的,任务的启动延时也很高,一般都在10秒左右。MapReduce的执行引擎是传统的逐行执行模式,每条记录都需要经过序列化、反序列化、数据编解码的过程,每个过程的开销都很大,因此处理延时非常高。
[0006]为了解决MapReduce任务启动延时高的问题,Spark计算框架提出了一种轻量级的调度框架,将任务启动延时降低到I秒左右。但其仍然采用逐行执行模式,每条记录都需要经过序列化、反序列化、数据编解码的过程,并且会占用大量的内存空间从而导致系统不稳定。大量的实验数据证明,一条记录的序列化、反序列化和编解码过程耗费的时间往往是实际参与计算的时间的数倍,因此Spark系统的执行效率仍然不高且系统稳定性很差,无法满足企业软件对性能和稳定性的要求。

【发明内容】

[0007]本发明的一个目的是提供一种分布式数据向量化处理方法和装置,以解决逐行执行模式带来的执行效率低,耗费时间久的问题。
[0008]根据本发明的一个方面,提供了一种分布式数据向量化处理方法,包括:
[0009]建立多行数据缓存以存储多行基于行的字节数组;
[0010]将基于行的字节数组转换为基于列的字节数组;
[0011]对代码指令进行向量化处理;
[0012]以所述向量化处理后的代码指令对所述基于列的字节数组进行向量化计算。
[0013]根据本发明的另一方面,还提供了一种分布式数据向量化处理装置,包括:
[0014]缓存模块,用于建立多行数据缓存以存储多行基于行的字节数组;
[0015]转换模块,用于将基于行的字节数组转换为基于列的字节数组;
[0016]向量化处理模块,用于对代码指令进行向量化处理;
[0017]向量化计算模块,用于以所述向量化处理后的代码指令对所述基于列的字节数组进行向量化计算。
[0018]现有的数据库计算引擎每次从系统中读出一行数据后完成整个执行计划的计算过程,然后再执行下一行数据直到计算全部完成。与现有技术相比,本发明的一个实施例通过向量化模型每次从数据库中读出一定数量的行数,并通过绑定到CPU cache的方式让这些数据驻留CPU cache (高速缓存),再去执行编译好的执行计划。这种方式避免了多次读出的系统开销,并能有效的利用系统缓存,同时通过有效的利用CPU的高效向量化指令集,如SSE (Streaming SIMD Extens1ns,指令集),来加速计划的执行效率,提高系统的性能。此外,通过向量化代码单元可以将原本低效的代码二次编译后生成向量化代码,大幅度提尚系统的性能。
【附图说明】
[0019]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0020]图1示出本发明实施例一的分布式数据向量化处理方法的流程示意图;
[0021]图2示出本发明实施例二的分布式数据向量化处理方法的流程示意图;
[0022]图3示出本发明实施例三的分布式数据向量化处理装置的结构示意图;
[0023]图4示出本发明实施例四的分布式数据向量化处理装置的结构示意图。
[0024]附图中相同或相似的附图标记代表相同或相似的部件。
【具体实施方式】
[0025]下面结合附图对本发明作进一步详细描述。
[0026]图1示出本发明实施例一的分布式数据向量化处理装置的结构示意图,如图1所示,本发明实施例一的分布式数据向量化处理装置包括:缓存模块101、转换模块102、向量化处理模块103和向量化计算模块104。
[0027]其中,缓存模块101,用于建立多行数据缓存以存储多行基于行的字节数组;转换模块102,用于将基于行的字节数组转换为基于列的字节数组;向量化处理模块103,用于对代码指令进行向量化处理;向量化计算模块104,用于以所述向量化处理后的代码指令对所述基于列的字节数组进行向量化计算。
[0028]在此,缓存模块101建立多行数据缓存以存储多行基于行的字节数组,缓存可以采用CPU cache(高速缓存),从而节省了从磁盘读取数据的时间。转换模块102将基于行的字节数组转换为基于列的字节数组,改变了现有技术中对指令代码逐行执行的模式,将按行存放的数据结构转换为按列存放,然后对按列存放的数据批量进行读出、序列化、反序列化以及编解码操作,最后参与实际运算,以批量执行方式来减少函数调用开销,可以有效的利用磁盘带宽的利用率,并且能充分利用CPU cache的快速存储读取功能。向量化处理模块103对代码指令进行向量化处理。向量化处理是指对原计算代码自动进行二次编译,以生成可向量化执行的代码或指令。向量化处理后的代码指令能够应用在向量上而不是单个数据上。例如对于聚合算法,现有的普通标量代码指令只能基于单个数据进行各个数据的逐级累加聚合,每当单个数据发生变化时,都需要进行一次运算。而采用向量化代码指令可以一次应用在批量数据上,而不是逐个数据进行聚合,一次调用向量化代码指令,就可以对相同数据结构下的同类数据进行整体运算,从而减少了代码调用次数,也就相应减少了代码调用时间。最后采用向量化计算模块104以所述向量化处理后的代码指令对所述基于列的字节数组进行向量化计算,现有的CPU提供了单指令多数据的指令集以进行向量化计算,如x86的SSE指令集,最多可以在一条指令中对512bit的数据完成计算。相对于标量代码指令中的一条指令一次只能计算32bit的数据,向量化指令的性能提升能够高达8倍。本发明的技术方案,将函数操作的数据从单个数据变成数组,这样可以极大的减少函数调用的开销。另外由于一次操作批量数据,CPU cache能够被有效的利用起来,cache missrat1 (高速缓存命中率)会有效的降低。从高级语言生成x86汇编时,由于操作的数据都是批量的,通过有效的组织数据并通过代码生成器生成向量化指令能够进一步加速计算。
[0029]图2示出本发明实施例二的分布式数据向量化处理装置的结构示意图,如图2所示,本发明实施例二的分布式数据向量化处理装置包括:缓存模块101、转换模块102、向量化处理模块103和向量化计算模块104。
[0030]其中,缓存模块101,用于建立多行数据缓存以存储多行基于行的字节数组;转换模块102,用于将基于行的字节数组转换为基于列的字节数组;向量化处理模块103,用于对代码指令进行向量化处理;向量化计算模块104,用于以所述向量化处理后的代码指令对所述基于列的字节数组进行向量化计算。
[0031]进一步,基于行的字节数组中,各行数据的数据结构为按照对象进行排列;
[0032]所述转换模块102还用于:将按照对象排列的各行基于行的字节数组,转换为按照所述对象的属性排列的所述基于列的字节数组。
[0033]在此,基于行的字节数组中,各行数据的数据结构为按照各个对象进行分类排列;基于列的字节数组中,各行数据的数据结构为按照对象的各个属性进行分类排列,从而将同一数据结构下的同类数据按类存储,便于基于向量化指令进行批量运算。以结构化查询语言(SQL,Structured Query Language)为例进行更加详细的说明。在SQL分布式计算过程中,一般需进行序列化和反序列化、列与表达式计算、自定义函数计算等。例
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1