一种SQL语义感知的弹性倾斜处理方法及系统技术方案

技术编号:27934662 阅读:24 留言:0更新日期:2021-04-02 14:14
本发明专利技术提出一种SQL语义感知的弹性倾斜处理方法和系统,针对MapReduce平台由于倾斜分片而导致处理的并行度下降问题,提出了基于细粒度定长子分片的两级弹性并行处理机制,提高处理倾斜分片的并行度,同时减少子分片之间的同步开销;并且针对MapReduce平台由于倾斜分片而导致的容错性能降低问题,提出了子分片级检查点机制,实现倾斜负载的快速故障恢复。

【技术实现步骤摘要】
一种SQL语义感知的弹性倾斜处理方法及系统
本专利技术涉及数据管理
,并特别涉及一种SQL语义感知的弹性倾斜处理方法及系统。
技术介绍
在分布式系统中,任何的分析作业都必须通过平均分配到大量的线程中以达到良好的加速执行效果,而现实工作中平均分配难以实现,因此倾斜(skewness)在所难免。在MapReduce架构中,为了充分利用大量节点的并行计算能力,完成对海量数据的分析与操作,其必要条件是所有分析操作必须在数以万计的线程之间平均分配以达到良好的加速比。而由于大数据分析负载的随机性和用户数据的多样性,以及海量数据通常缺乏足够的统计信息用于了解数据内部的分布规律,因此在MapReduce框架中的倾斜更为普遍且对程序整体执行性能影响重大。倾斜从来源上可分为计算倾斜(computationalskew)和数据分布倾斜(partitionskew)两类。计算倾斜的主要来源是不同数据在运行时所需计算时长不一,而数据分布倾斜的主要原因是传统基于key哈希值的数据划分方式无法感知数据集中key本身的不均,导致数据划分后出现数据量明显大于均值的分片——倾斜分片。倾斜造成的直观后果是执行同类任务的不同作业执行时长不同,从而导致集群中负载分布不均,降低整体计算并行度,导致集群资源的不充分利用甚至应用的崩溃。在相同数据量、相同查询场景下,SparkSQL在倾斜负载JCC-H的执行时间是未倾斜负载TPC-H的3.24倍。针对倾斜的优化可分为五类,分别是:1、基于额外统计作业的静态划分式倾斜处理技术方案:为了在作业运行时获得对作业倾斜情况更精准的分析,并维持原始数据处理程序执行逻辑不变,这类技术将倾斜的识别与处理分成两个阶段在执行实际作业前运行额外的用于获取统计分析信息的作业;根据得到的统计信息,得到一种"非倾斜"的数据划分方式,然后按照此种固定的数据划分为每个分片启动独立作业进行处理,并期待达到消除倾斜的目的。缺点:1)由于其统计是针对数据量的,因此无法处理计算倾斜;2)额外的统计作业有额外的启动、执行开销。3)一次性得到的划分方式无法针对运行时系统的可用资源实时高效使用,可能造成系统资源的不充分利用。2、基于在Map阶段进行数据采样的静态划分式倾斜处理技术方案:在MapReduce框架的开源实现Hadoop中,reducer作业默认在map完成5%后开始工作。一些以处理数据分布倾斜为目标的研究为了避免额外统计作业识别引入过大性能开销,采取了在map阶段内部进行key特征收集、进行对key出现频率的估计。这类作业往往通过延迟reduce阶段启动时间的方式,尽可能多的进行采样来达到更加精准的key分步的预测。缺点:1)由于其统计是针对数据量的,因此无法处理计算倾斜;2)一次性得到的划分方式无法针对运行时系统的可用资源实时高效使用,可能造成系统资源的不充分利用。3、基于动态感知的倾斜处理——SkewTune技术方案:SkewTune提出了在节点算力空闲时每次识别一个倾斜task,并将task未处理数据在多个计算slot间均分的方法处理倾斜。缺点:由于SkewTune无法感知倾斜task的语义,因此其只能按照key进行分片的再划分,因此无法处理task中单key倾斜的场景。4、基于聚合算子感知的倾斜处理——AggSkew技术方案:AggSkew按照分片大小,将处理分片的任务分为segmentTask和stealingTask,segmentTask将大分片细分成确定个数的segment,stealingTask在处理完其分片后,取未完成的segment进行处理。缺点:1)倾斜处理的适用范围局限在聚合算子;2)倾斜处理的最大并行度即segment数与集群可用资源数无关,无法充分利用集群空闲计算资源。5、基于连接算子感知的倾斜处理——Spark-adaptive技术方案:Spark-Adaptive基于广播的思想处理join算子的倾斜——在识别倾斜partition后,Spark-adaptive将参与join的一侧partition进行数据的再划分到多Task执行,并将另一侧partition以广播形式传送到各倾斜处理的task中,以单侧partition的多次复制开销为代价完成join算子的倾斜处理。缺点:1)处理倾斜的适用范围局限在join算子;2)并行处理join倾斜时不考虑集群可用资源,无法充分利用集群可用资源。
技术实现思路
本专利技术的目的是解决倾斜导致的同类任务的不同作业执行时长不同,从而导致集群中负载分布不均,降低整体计算并行度,导致集群资源的不充分利用甚至应用的崩溃问题,从而提出一种SQL语义感知的动态倾斜处理方法,其中SQL是ANSI发布的结构化查询语言标准,用于查询、访问、操作数据库。。针对现有技术的不足,本专利技术提出一种SQL语义感知的弹性倾斜处理方法,其特征在于,包括:步骤1、根据分布式系统的并行框架的并行度以及待处理作业的程序语义,将待处理作业的完整数据集划分为多个分片,并根据分片大小将分片分配至该分布式系统内的计算节点;步骤2、计算节点为其所分配的分片赋予工作线程,将分片以定长子分片粒度划分,工作线程以定长子分片为粒度处理其被赋予的分片的子分片,并在处理过程中判断计算节点内是否存在未赋予分片或已完成分片处理的空闲线程,若是,则执行步骤3,否则,执行步骤5;步骤3、判断该空闲线程所属计算节点内除该空闲线程以外的其它工作线程中是否存在未处理数据量大于第一预设值的分片,若是,则从所有未处理数据量大于第一预设值的分片中选择一个分片A,让该空闲线程与分片A对应的工作线程协同处理该分片A,否则执行步骤4;步骤4、判断该分布式系统中除该空闲线程所属计算节点外的其余计算节点中是否存在未处理数据量大于第二预设值的分片,若是,则从所有未处理数据量大于第二预计值的分片中选择一个分片B,把该分片B的未处理数据部分切分至该空闲线程所属计算节点,该空闲线程以该定长子分片粒度处理该分片B的部分未处理数据,执行步骤5,否则直接执行步骤5;步骤5、根据该程序语义集合各工作线程的处理结果,作为该待处理作业的完整数据集的最终处理结果。所述的SQL语义感知的弹性倾斜处理方法,其特征在于,该并行框架包括:分片划分表和分片到节点的划分器,该分片划分表用于记录分片数据到节点的划分关系,该划分器负责维护该分片划分表,该分片划分表的每个表项为包括PID、EID和PSIDs的三元组,PID是partitionid,用于唯一确定一个分片;EID是executorid,用于唯一确定一个计算节点;PSIDs为包含所有已经被分配的分片文件段。所述的SQL语义感知的弹性倾斜处理方法,其特征在于,该步骤4包括:步骤41、该待处理作业的程序语义包括排序Sort语义,各个工作线程的处理结果为按键值顺序排序的子分片处理结果,通过找到各子分片处理结果的N-1个局部划分点,将各工作线程本文档来自技高网
...

【技术保护点】
1.一种SQL语义感知的弹性倾斜处理方法,其特征在于,包括:/n步骤1、根据分布式系统的并行框架的并行度以及待处理作业的程序语义,将待处理作业的完整数据集划分为多个分片,并根据分片大小将分片分配至该分布式系统内的计算节点;/n步骤2、计算节点为其所分配的分片赋予工作线程,将分片以定长子分片粒度划分,工作线程以定长子分片为粒度处理其被赋予的分片的子分片,并在处理过程中判断计算节点内是否存在未赋予分片或已完成分片处理的空闲线程,若是,则执行步骤3,否则,执行步骤5;/n步骤3、判断该空闲线程所属计算节点内除该空闲线程以外的其它工作线程中是否存在未处理数据量大于第一预设值的分片,若是,则从所有未处理数据量大于第一预设值的分片中选择一个分片A,让该空闲线程与分片A对应的工作线程协同处理该分片A,否则执行步骤4;/n步骤4、判断该分布式系统中除该空闲线程所属计算节点外的其余计算节点中是否存在未处理数据量大于第二预设值的分片,若是,则从所有未处理数据量大于第二预计值的分片中选择一个分片B,把该分片B的未处理数据部分切分至该空闲线程所属计算节点,该空闲线程以该定长子分片粒度处理该分片B的部分未处理数据,执行步骤5,否则直接执行步骤5;/n步骤5、根据该程序语义集合各工作线程的处理结果,作为该待处理作业的完整数据集的最终处理结果。/n...

【技术特征摘要】
1.一种SQL语义感知的弹性倾斜处理方法,其特征在于,包括:
步骤1、根据分布式系统的并行框架的并行度以及待处理作业的程序语义,将待处理作业的完整数据集划分为多个分片,并根据分片大小将分片分配至该分布式系统内的计算节点;
步骤2、计算节点为其所分配的分片赋予工作线程,将分片以定长子分片粒度划分,工作线程以定长子分片为粒度处理其被赋予的分片的子分片,并在处理过程中判断计算节点内是否存在未赋予分片或已完成分片处理的空闲线程,若是,则执行步骤3,否则,执行步骤5;
步骤3、判断该空闲线程所属计算节点内除该空闲线程以外的其它工作线程中是否存在未处理数据量大于第一预设值的分片,若是,则从所有未处理数据量大于第一预设值的分片中选择一个分片A,让该空闲线程与分片A对应的工作线程协同处理该分片A,否则执行步骤4;
步骤4、判断该分布式系统中除该空闲线程所属计算节点外的其余计算节点中是否存在未处理数据量大于第二预设值的分片,若是,则从所有未处理数据量大于第二预计值的分片中选择一个分片B,把该分片B的未处理数据部分切分至该空闲线程所属计算节点,该空闲线程以该定长子分片粒度处理该分片B的部分未处理数据,执行步骤5,否则直接执行步骤5;
步骤5、根据该程序语义集合各工作线程的处理结果,作为该待处理作业的完整数据集的最终处理结果。


2.如权利要求1所述的SQL语义感知的弹性倾斜处理方法,其特征在于,该并行框架包括:
分片划分表和分片到节点的划分器,该分片划分表用于记录分片数据到节点的划分关系,该划分器负责维护该分片划分表,该分片划分表的每个表项为包括PID、EID和PSIDs的三元组,PID是partitionid,用于唯一确定一个分片;EID是executorid,用于唯一确定一个计算节点;PSIDs为包含所有已经被分配的分片文件段。


3.如权利要求1所述的SQL语义感知的弹性倾斜处理方法,其特征在于,该步骤4包括:
步骤41、该待处理作业的程序语义包括排序Sort语义,各个工作线程的处理结果为按键值顺序排序的子分片处理结果,通过找到各子分片处理结果的N-1个局部划分点,将各工作线程的处理结果划分成等长的N个部分,其中N为用于处理当前分片的线程总数;
步骤42、将局部划分点进行顺序排序,得到中间排序结果,将该中间排序结果中找到N-1个全局划分点,将中间排序结果划分成等长的N个部分,将该N-1个全局划分点对应的N个键值范围划分给各计算节点,由计算节点触发到其他计算节点键值范围的取数据过程,以最终完成各键值范围的归并排序作为分片的排序结果。


4.如权利要求1所述的SQL语义感知的弹性倾斜处理方法,其特征在于,该步骤4包括:
步骤43、该待处理作业的程序语义包括聚集Aggregate语义,各个工作线程的处理结果为子分片的聚集处理结果,各工作线程分别在内存中维护固定大小的用于记录该聚集处理结果的哈希表,当该分片的数据全部处理完毕时,各工作线程将其哈希表划分成N个哈希片,N为参与该分片处理的工作线程总数;
步骤44、按照各计算节点参与处理的工作线程数,将该N个哈希片划分给各个工作线程,由计算节点触发到其他节点哈希片的取数据过程,并由各工作线程最终完成各哈希片的聚合作为分片的聚集结果。


5.如权利要求1所述的SQL语义感知的弹性倾斜处理方法,其特征在于,还包括:
步骤6、定期将各计算节点涉及的中间计算数据保存至本地磁盘,当分片处理过程中出现错误需要恢复时,判断出现错误的故障计算节点是否可以恢复,若是,则根据该故障计算节点的本地磁盘中该中间计算数据进行故障恢复,否则对该故障计算节点处理的数据进行分片文件的重新计算。

【专利技术属性】
技术研发人员:申毅杰熊劲
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:北京;11

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

1