一种基于GPU的SparkSQL加速方法技术

技术编号:38023195 阅读:7 留言:0更新日期:2023-06-30 10:50
本发明专利技术公开一种基于GPU的Spark SQL加速方法,包括以下步骤:Spark SQL由投影、数据和条件组成,分别对应SQL查询过程中的结果、数据和操作,SQL语句按结果、数据和操作次序来描述;对读入的SQL语句进行解析,分辨出SQL语句中的关键词、表达式,从而判断SQL语句是否规范,进而形成执行树,将执行树和数据字典进行绑定和执行,在这些计划中选择一个最优计划执行。GPU使用Cuda语句可实现SQL中常用的数据组合、排序等操作,从而对数据查询等操作实现大幅加速。本发明专利技术将GPU与Spark平台相结合,将SQL的运算操作从CPU转移到GPU执行,实现对Spark SQL运算的提速。无需应用修改代码,无需额外增加服务器节点,可以直接节省硬件投资和系统维护成本。护成本。护成本。

【技术实现步骤摘要】
一种基于GPU的Spark SQL加速方法


[0001]本专利技术属计算机
,涉及一种基于GPU的Spark SQL加速方法。

技术介绍

[0002]随着机器学习和Web服务的规模在指数级增长,通用处理器(CPU)的处理能力越来难满足庞大而复杂的计算需求。由于通用CPU执行单元可以执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。这样使得CPU具有通用处理能力的同时也牺牲了一定的运算处理能力。
[0003]进行大规模数据科学研究通常需要包含数千台服务器的集群,运行工作负载和查询可能需要数小时或数天,在带有GPU加速的服务器运行相同规模的工作负载只需要其中一小部分基础设施,在几分钟甚至几秒钟内得到结果。
[0004]在大规模的数据查询中,最常用的方法就是使用SQL查询。从标准的关系型数据库,到Hadoop、Spark大数据框架,SQL的应用十分广泛。GPU使用Cuda语句可实现SQL中常用的数据组合、排序等操作,从而对数据查询等操作实现大幅加速。针对这一问题,迫切需要开发一种全新的数据加速处理方法,以满足实际工作的需要。

技术实现思路

[0005]针对现有技术上存在的不足,本专利技术提供一种基于GPU的Spark SQL加速方法,以克服现有同类产品生产中存在的不足,满足实际使用的需要。
[0006]为了达到上述目的,本专利技术提供如下技术方案:
[0007]一种基于GPU的Spark SQL加速方法,包括以下步骤:
[0008]S1,Spark SQL由投影、数据和条件组成,分别对应SQL查询过程中的结果、数据和操作,SQL语句按结果、数据和操作次序来描述;
[0009]S2,对读入的SQL语句进行解析,分辨出SQL语句中的关键词、表达式等,从而判断SQL语句是否规范,进而形成执行树,将执行树和数据字典进行绑定和执行,在这些计划中选择一个最优计划执行;
[0010]S3,基于Spark SQL架构,引入GPU通信管理模块和GPU加速模块实现通过GPU对SQL的处理进行加速,主要包括对CPU与GPU之间的协作管理,数据交换优化,可伸缩的分布式数据集RDD(Resilient Distributed Dataset)执行操作的优化和通过Cuda编程实现表的操作,具体到对表的操作有连接、扫描和排序操作,采用Cuda实现,以实现对表操作的加速。
[0011]本专利技术中,利用Spark GPU适配模块,发现系统GPU资源,支持spark standalone模式部署的集群,发现worker节点中存在的GPU资源,spark任务调度器在执行spark SQL任务时,发现worker节点存在GPU资源,优先调度使用该节点GPU完成计算任务。
[0012]利用GPU通信管理模块,实现GPU与CPU之间的通信工作,GPU与CPU通过PCIe总线进行数据交换,流程是GPU开辟设备内存,CPU将内存中需要计算的数据拷贝给GPU,运行GPU核函数并发执行运算,运算完成后通过DMA方式将计算结果通过PCIe总线从GPU内存拷贝到主
机内存。
[0013]在GPU核函数中实现Scan、Join和Group by三类SQL操作,在执行过程中将操作请求进行合并,减少CPU和GPU之间的数据交互。
[0014]利用GPU加速模块,Join在GPU中实现表的连接操作,包括内联、左联和右联,实现算法包括Nestloop和hash两种连接算法,Sort排序算法使用双条排序算法,即比较顺序与数据无关的排序方法,所以特别适合GPU做并行化处理。具体过程是将一个双调序列切成两半,每一段的单调性统一,然后将两段叠放起来,进行两两比较,这样够在左右两段分别得到一个双调序列,且左边的双调序列中元素全部小于右侧得到的双调序列的所有元素。迭代这个过程,每次都能将序列二分成两个子双调序列,直到这个子双调序列的长度为2,也就变成了一个单调子序列,这个过程排序后原先的长双调序列就变为有序了。
[0015]主机内存中spark RDD在内存中按行的方式存储,为列式存储,使用off

heap代替heap内存,避免java垃圾回收改变内存中对象存储位置。
[0016]本专利技术将GPU与Spark平台相结合,将SQL的运算操作从CPU转移到GPU执行,实现对Spark SQL运算的提速。无需应用修改代码,即可实现数据库性能提升,同样数量的服务器集群环境下使用GPU加速可提升2

10倍性能,无需额外增加服务器节点,可以直接节省硬件投资和系统维护成本。
附图说明
[0017]图1为本专利技术基于GPU的Spark SQL加速方法的生成计划示意图;
[0018]图2为本专利技术基于GPU的Spark SQL加速方法的存储器关系示意图。
具体实施方式
[0019]下面将结合本专利技术的附图对本专利技术的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0020]如图1—2所示,一种基于GPU的Spark SQL加速方法,包括以下步骤:
[0021]S1,Spark SQL由投影、数据和条件组成,分别对应SQL查询过程中的结果、数据和操作,SQL语句按结果、数据和操作次序来描述;
[0022]S2,对读入的SQL语句进行解析,分辨出SQL语句中的关键词、表达式等,从而判断SQL语句是否规范,进而形成执行树,将执行树和数据字典进行绑定和执行,在这些计划中选择一个最优计划执行;
[0023]S3,基于Spark SQL架构,引入GPU调度管理和GPU加速模块实现通过GPU对SQL的处理进行加速,主要包括对CPU与GPU之间的协作管理,数据交换优化,RDD执行操作的优化和通过Cuda编程实现表的操作具体到对表的操作有连接、扫描和排序等操作,采用Cuda实现,以实现对表操作的加速。
[0024]本专利技术中,通过Spark GPU适配模块,用于发现系统GPU资源,支持spark standalone模式部署的集群,发现worker节点中存在的GPU资源,spark任务调度器在执行spark SQL任务时,发现worker节点存在GPU资源,优先调度使用该节点GPU完成计算任务。
[0025]利用GPU通信管理模块,实现GPU与CPU之间的通信工作,GPU与CPU通过PCIe总线进行数据交换,流程是GPU开辟设备内存,CPU将内存中需要计算的数据拷贝给GPU,运行GPU核函数并发执行运算,运算完成后通过DMA方式将计算结果通过PCIe总线从GPU内存拷贝到主机内存。
[0026]在GPU核函数中实现Scan、Join和Group by三类SQL操作,在执行过程中将操作请求进行合并,减少CPU和GPU之间的数据交互。...

【技术保护点】

【技术特征摘要】
1.一种基于GPU的SparkSQL加速方法,其特征在于,包括以下步骤:S1,SparkSQL由投影、数据和条件组成,分别对应SQL查询过程中的结果、数据和操作,SQL语句按结果、数据和操作次序来描述;S2,对读入的SQL语句进行解析,分辨出SQL语句中的关键词、表达式等,从而判断SQL语句是否规范,进而形成执行树,将执行树和数据字典进行绑定和执行,在这些计划中选择一个最优计划执行;S3,基于SparkSQL架构,引入GPU通信管理模块和GPU加速模块实现通过GPU对SQL的处理进行加速,主要包括对CPU与GPU之间的协作管理,数据交换优化,可伸缩的分布式数据集RDD执行操作的优化和通过Cuda编程实现表的操作,具体到对表的操作有连接、扫描和排序操作,采用Cuda实现,以实现对表操作的加速。2.根据权利要求1所述的基于GPU的SparkSQL加速方法,其特征在于:利用SparkGPU适配模块,发现系统GPU资源,支持sparkstandalone模式部署的集群,发现worker节点中存在的GPU资源,spark任务调度器在执行sparkSQL任务时,发现worker节点存在GPU资源,优先调度使用该节点GPU完成计算任务。3.根据权利要求1所述的基于GPU的SparkSQL加速方法,其特征在于:利用GPU通信管理模块,实现GPU与CPU之间的通信工作,GPU与CPU通过PCIe总线进行数据交换,流程是GPU开辟设备内存,CPU...

【专利技术属性】
技术研发人员:周昊程吴鹏刘友春李禹梁侯晓泽齐亚东
申请(专利权)人:江苏电力信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1