【技术实现步骤摘要】
一种SQL语义感知的弹性倾斜处理方法及系统
本专利技术涉及数据管理
,并特别涉及一种SQL语义感知的弹性倾斜处理方法及系统。
技术介绍
在分布式系统中,任何的分析作业都必须通过平均分配到大量的线程中以达到良好的加速执行效果,而现实工作中平均分配难以实现,因此倾斜(skewness)在所难免。在MapReduce架构中,为了充分利用大量节点的并行计算能力,完成对海量数据的分析与操作,其必要条件是所有分析操作必须在数以万计的线程之间平均分配以达到良好的加速比。而由于大数据分析负载的随机性和用户数据的多样性,以及海量数据通常缺乏足够的统计信息用于了解数据内部的分布规律,因此在MapReduce框架中的倾斜更为普遍且对程序整体执行性能影响重大。倾斜从来源上可分为计算倾斜(computationalskew)和数据分布倾斜(partitionskew)两类。计算倾斜的主要来源是不同数据在运行时所需计算时长不一,而数据分布倾斜的主要原因是传统基于key哈希值的数据划分方式无法感知数据集中key本身的不均,导致数据划分后出现数据量明显大于均值的分片——倾斜分片。倾斜造成的直观后果是执行同类任务的不同作业执行时长不同,从而导致集群中负载分布不均,降低整体计算并行度,导致集群资源的不充分利用甚至应用的崩溃。在相同数据量、相同查询场景下,SparkSQL在倾斜负载JCC-H的执行时间是未倾斜负载TPC-H的3.24倍。针对倾斜的优化可分为五类,分别是:1、基于额外统计作业的静态划分式倾斜处理 ...
【技术保护点】
1.一种SQL语义感知的弹性倾斜处理方法,其特征在于,包括:/n步骤1、根据分布式系统的并行框架的并行度以及待处理作业的程序语义,将待处理作业的完整数据集划分为多个分片,并根据分片大小将分片分配至该分布式系统内的计算节点;/n步骤2、计算节点为其所分配的分片赋予工作线程,将分片以定长子分片粒度划分,工作线程以定长子分片为粒度处理其被赋予的分片的子分片,并在处理过程中判断计算节点内是否存在未赋予分片或已完成分片处理的空闲线程,若是,则执行步骤3,否则,执行步骤5;/n步骤3、判断该空闲线程所属计算节点内除该空闲线程以外的其它工作线程中是否存在未处理数据量大于第一预设值的分片,若是,则从所有未处理数据量大于第一预设值的分片中选择一个分片A,让该空闲线程与分片A对应的工作线程协同处理该分片A,否则执行步骤4;/n步骤4、判断该分布式系统中除该空闲线程所属计算节点外的其余计算节点中是否存在未处理数据量大于第二预设值的分片,若是,则从所有未处理数据量大于第二预计值的分片中选择一个分片B,把该分片B的未处理数据部分切分至该空闲线程所属计算节点,该空闲线程以该定长子分片粒度处理该分片B的部分未处理数 ...
【技术特征摘要】 【专利技术属性】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。