一种海量数据场景下的数据全局合并方法与流程

文档序号:26050400发布日期:2021-07-27 15:25阅读:91来源:国知局
一种海量数据场景下的数据全局合并方法与流程
本发明公开了一种海量数据场景下的数据全局合并方法,涉及计算机数据合并排序领域,尤其涉及海量数据场景下实时快速全局排序场景。
背景技术
:提高海量数据的实时查询效率一直是数据库设计领域永恒的追求,实际项目中常常遇到入库小文件过多,数据无序导致实时查询速度变慢的问题,小文件过多会使操作系统扫描多个文件,产生大量随机读请求,尤其对于机械硬盘来说,大量的随机读请求无疑会极大地降低整个系统的吞吐量。其次,由于海量数据大都存储于hdfs(hadoopdistributedfilesystem)上,海量小文件的存在会给整个hadoop集群性能带来严重的性能问题。最后,由于数据是实时接入的,通过一条带条件的sql查询语句来查询数据时,若数据整体无序,则查询的命中结果集很可能存在于多个文件之中,会使系统的查询变慢。因此,对数据库设计者而言,面对海量数据的小文件,优化数据存储,提高数据有序性是提高实时查询效率最有效的手段之一。为减少hdfs上小文件数量,研究人员们提出了多种手段用于小文件合并,如专利号cn111008235a中提出了一种基于spark的小文件合并方法及系统,该专利中利用spark定时任务对分区内小文件进行周期性合并,根据任务规则将多个分区中的多个文件合并成1个文件,降低小文件散落数量,从结果上看确实降低了磁盘读取负荷与网络传输消耗,并且有效的提高了数据的查询效率,但是对于海量数据而言,当积压数据量大时,对分区内小文件进行一次性合并,系统资源消耗较大,耗时较长,合并期间,数据实时查询性能受影响,同时,该专利合并期间未对数据进行全局排序,数据查询性能提高有限。多路归并排序由于支持多线程同步排序,被认为是海量数据排序中最有效的排序算法之一,但面对实时接入的数据,仅通过一级多路归档排序显然耗时较长,易造成小文件堆积,实时查询速度仍受到影响,专利号cn111562898a中提出了一种基于fpga实现的多级归并排序方法,该算法中将排序操作分为多级,前一级的输出作为下一级的输入,支持任意长度排序队列以及大数据量数据排序,在满足时序要求的同时,满足海量离线数据的高效快速数据排序,需要注意的是,该算法基于fpga实现,不适用主流cpu处理器环境,同时该算法不适用于海量数据实时入库场景。因此,数据库设计中需要考虑一种高效,快速并能支持实时数据的排序及合并方法。技术实现要素:本发明所要解决的技术问题是:针对现有技术的缺陷,提供一种海量数据场景下的数据全局合并方法。本发明为解决上述技术问题采用以下技术方案:一种海量数据场景下的数据全局合并方法,所述方法包括:步骤一、minor合并,将n个小文件作为一个批次进行归并排序,产生1个或多个文件大小合标的文件;步骤二、桶合并,经过步骤一后,件大小达标的文件会进入桶合并的候选队列,桶合并逻辑中对队列中的文件再次进行任务构造并进行多路归并排序;步骤三、major合并,经过步骤二桶合并后的文件将进入major合并的候选队列进行major合并;步骤四、经过步骤一至步骤三的三级合并完成之后,对现有桶进行平衡判断,若桶内数据不均匀,则执行桶的再平衡操作。作为进一步优选方案,所述minor合并过程中,输入文件包括实时接入的小文件同时,也包括minor合并后产生的未达阈值的小文件,minor合并阈值由用户自己配置。优选地,考虑到文件可能存储于hadoop集群上,为防止文件分片可设置为256m。作为进一步优选方案,所述minor合并过程中,对输入文件的大小进行排序,将符合设定阈值大小的一批文件进行归并排序,使得更小的文件最先被合并。当minor合并生成的文件大小超过设置阈值时,会启动文件分片策略,使最终进入桶合并的minor文件大小相近;所述分片策略指的是通过估算找到最有可能达到分片条件的数据条数n,当写入数据量达到n时,获取文件实际大小,若此时文件达不到分片条件,则修正n的值,使得n逐渐增大,直到文件大小达到分片条件。作为进一步优选方案,所述桶合并过程中,所述桶分为两层,分别为level0与level1层,level0中存储桶合并后生成的文件,level1层存储major合并后生成的文件;所述桶合并指的是在排序的过程中根据排序字段的范围,将数据分别写入到对应的桶内的新文件中。经过多轮桶合并后,当桶内的level0层的文件个数达到阈值,即触发major合并;major合并首先计算level1层中与level0中所有文件存在交集的文件,然后将所有level0层和level1层有交集的文件集合作为一个批次进行归并排序,生成n个level1层的彼此之间有序的新文件。作为进一步优选方案,所述桶的再平衡分为两个步骤:1、桶的分裂,所述桶的分裂指的是将原先的桶分裂成多个彼此不相交的,不可分割的最小子集;2、桶的合并,所述桶的合并指的是首先基于所有文件计算出新桶的平均大小,然后基于分裂后的桶集合,进行两两合并,直到合并后的新桶达到平均大小。作为进一步优选方案,为区分和筛选不同环节生成的文件,所述三个合并环节生成的文件名前缀名不同。本发明采用以上技术方案与现有技术相比,具有以下技术效果:1.海量数据实时查询场景下,小文件的存在会严重影响数据查询效率,传统的一级合并方式耗时较长,难以第一时间提高实时数据查询效率,本发明提出的一种海量数据场景下的数据全局合并方法,将合并阶段分为三级,其中前两级为过渡阶段,耗时较短,可有效提高数据的查询效率。2.提高数据有序性是提高实时数据查询效率的有效手段之一,传统的排序算法要么不适用于海量数据排序场景,要么无法满足实时入库数据排序要求,而本发明提出的一种海量数据场景下的数据全局合并方法,对数据进行分级排序,当桶内数据不均匀时,其自带的再平衡算法可保证数据排序不会发生数据偏移,提高了海量数据排序效率。本发明提出的一种海量数据场景下的数据全局合并方法能够高效快速的对实时数据进行全排序及合并,可有效提高实时数据的查询效率,对数据库的优化设计具有很好的参考价值。附图说明图1是本发明的整体架构示意图。图2是本发明过程中,minor合并示意图。图3是本发明过程中,桶合并示意图。图4是本发明过程中,major合并示意图。图5是本发明过程中,桶的再平衡示意图。图6是本发明中串行合并流程示意图。图7是本发明中,桶合并流程图。图8是本发明中,分片逻辑流程图。具体实施方式下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。下面结合附图对本发明的技术方案做进一步的详细说明:本发明提出的一种海量数据场景下的数据全局合并方法共分为三个环节:minor合并、桶合并和major合并。为了减小多路归并排序时间,本发明优选性能优异的败者树排序算法作为三级多路归并算法的实现,下述两个实施例中均利用败者树排序算法作为说明。实施例一:本实施例以数据库中海量数据实时合并排序为例,海量数据实时进入分区a和分区b中,并在分区内不断生成以part命名前缀的小文件,初始文件大小均小于256m,数据文件格式为orc文件,数据范围在1~4000之间。将本发明所提出的三级多路归并排序合并方法运用于spark分布式系统架构,整体架构图如图1所示,从图中可以看出,本发明提出的三级合并在merge-drive端中构造任务,并在merge-excutor端执行任务。在本实施例中,三级多路归并排序所需参数设置如下表所示:minor合并文件数量阈值100桶合并文件数量阈值8文件分片策略比例0.8minor合并文件大小阈值256m最大桶个数8major文件大小阈值1g本实施例中,利用本发明对分区a,b中数据进行三级多路归并排序步骤如下:步骤一:minor合并线程为周期性线程分别对分区a,b进行扫描生成文件列表,文件列表中存放的是part命名开头的小文件或minor开头的小文件,合并任务执行之前,判断分区a,b中是否有正在运行的minor任务,若有,则退出,保证同一时间,每个分区的minor合并任务只有一个。如图2所示,当分区内part文件和minor命名开头的小文件数量大于阈值100时,或者文件总大小大于256m时,启动minor合并,合并之前对分区中a,b中的数据文件的按大小进行排序并分批次构造合并任务,以便优先合并更小的part文件,每个合并任务合并文件数量可由实际情况动态调整,合并过程中读取part文件中数据并通过败者树排序算法对每批次数据文件进行排序,并生成以minor命名开头的大文件。将小文件合并为大文件时,检测生成的文件是否大于256m,若文件大小接近256m时,启动分片策略,生成一个或多个接近256m的大文件和一个小文件,文件命以minor开头,其中生成的大文件进入桶合并的候选队列,小文件与后续实时生成的part小文件重新进入minor合并的候选队列,分片策略的具体判断逻辑流程图如图8所示。至此minor合并结束并释放资源,周期线程继续扫描分区文件,等待分区文件数量达到阈值时,重新启动合并。步骤二:周期性桶合并线程实时扫描分区a,b中文件大小达到阈值的minor文件并生成文件列表,当列表中的文件数量达到桶合并的最小阈值时,对文件列表中文件进行分批次桶合并任务构造,合并任务启动之前判断当前分区是否有正在运行的桶合并任务,若有则退出,保证同一时间每个分区只存在一个桶合并任务。桶合并过程中,程序读写读取minor数据文件通过败者树排序算法对数据进行排序并将数据写入不同的桶中,生成的新文件以bucket命名开头,文件存储于桶的level0层,如图3所示,1~4000的数据被均匀写入到图中所示的八个桶中。桶合并中是否创建新桶的逻辑如图7所示。可以看出桶合并生成的文件只是文件内部有序,但桶内文件中的数据均在该桶的数据范围之内。步骤三:major合并线程周期性扫描桶内文件,当桶内文件数量满足major合并启动阈值时构造major合并任务,合并任务启动之前判断当前分区是否有正在运行的major合并任务,若有则退出,保证同一时间每个分区只存在一个major合并任务。每个major合并任务负责一个桶内的文件合并,合并过程中读取bucket和major文件中数据并通过败者树排序算法对每批次数据文件进行排序,并生成以major命名开头的大文件。如图4所示,major合并中将桶的level0层中的bucket文件与level1中的数据范围为1~200的major文件进行合并,显然生成的文件数据范围也在1~200之间,将桶内文件合并为major大文件时,检测生成的文件是否大于1g,若文件大小接近1g时,启动分片策略,生成一个或多个接近1g的大文件和一个小文件。分片策略与步骤一中的分片策略一致,不过分片阈值为1g,major合并后,生成的文件都将进入下轮major或桶合并的获选队列,可以看出,桶level1层的major文件是全局有序的。步骤三中,major合并完成之后,会执行桶平衡的逻辑判断。当桶内数据不平衡时,如其中一个桶内数据文件大小是其他桶数据文件大小的2倍及以上,执行桶的再平衡逻辑。如图5所示,桶1中数据大小大于是桶4的2倍以上,桶的再平衡逻辑执行,桶1,2,3,4分裂成桶1,2,3,4,5,6,7,新桶之间无交集,分裂完成之后,桶1与桶2合并成新的桶1,桶3,4,5合并成新的桶2,桶6,7合并成新的桶3。从图5以看出,桶的再平衡操作完成后,桶内数据分布均匀。实施例二:实施例一中,三级多路归并排序合并行执行,即对于同一分区而言(如分区a),可同时存在三级多路归并排序的三个环节,各环节之间互不干扰,对于海量数据而言,并行合并排序方式可以提高合并效率。当然,三级多路归并排序合并算法也可以串行合并基于实施例一的数据场景。将本发明的合并排序方式转为串行,即,对同一分区而言,同一时间只存在一种合并方式。步骤如下:三级多路归并排序合并程序周期性扫描分区a,b。首先执行minor合并逻辑,当分区内小文件达到minor合并启动条件时(小文件数量大于4或数据总大小大于256m),执行minor合并任务,合并逻辑与实施例一中minor合并逻辑一致,minor合并结束后生成已排序的minor开头文件,并将合并生成的新文件列表传入桶合并逻辑,桶合并逻辑中筛选文件列表中的达到阈值大小的minor文件,当文件数据达到阈值时,进行分批次桶合并任务构造,桶合并逻辑中通过归并算法生成的新文件存入桶的level0层,major合并扫描桶内level0和level1层的文件并进行合并排序,生成的新文件存放桶的level1层,major合并完成后执行桶的再平衡逻辑,至此,一个合并周期任务结束,三级多路归并合并线程继续执行下个周期任务。三级多路归并排序串行执行流程图如图6所示。上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1