一种基因变异数据分布式存储方法及架构与流程

文档序号:15492875发布日期:2018-09-21 20:59阅读:234来源:国知局
本发明涉及大数据存储领域,尤其是指一种基于列式存储和位图索引的基因变异数据分布式存储方法及架构。
背景技术
::随着基因测序技术的长足发展以及人们对个性化医疗的迫切需要,全基因组关联分析成为当下越来越热门的一个研究领域。全基因组关联分析依赖于大规模的基因变异检测数据,这些数据属于典型的大数据范畴,不同存储架构的数据组织方式、索引方式、拓展方式等会对数据的检索分析产生很大的影响。全基因组关联分析场景既需要低时延的随机读取性能,又需要高效的批量读写性能,不合适的存储架构可能会导致效率低下、模型复杂、可拓展性低等问题,需要设计合适的存储架构来提高全基因组关联分析的效率。基于hadoop分布式文件系统(hdfs)的存储方案将变异检测文件(vcf文件)以block块的形式存储在多个节点上,可扩展性强,可以高效地响应批量分析任务,但是它不能提供低延迟的随机数据访问,也无法提供数据更新操作。基于hbase的存储方案采用键值对的形式存储vcf文件,hbase是一个分布式数据库,可以方便的拓展到多个节点上,基于hbase可以实现低延迟的随机读写,但是因为hbase是列簇式存储,且存储的是键值对,它的scan开销比较大,无法实现高效的批量分析操作。基于hdfs+hbase的混合架构可以实现低延迟的随机读写及高效的批量分析,但是这种架构的模型复杂,数据维护成本大,且数据从生成到能够被批量分析的数据流延迟大。此外,还有一些基因型查询工具,如gqt,它在vcf文件的基础上创建位图索引来加速检索,但是这种工具仅能完成场景需要的部分功能,更复杂的查询需要组合多个工具,而且这些工具多是单节点处理的,可拓展性差。技术实现要素:本发明的目的在于克服现有技术的缺点与不足,提出了一种基于列式存储和位图索引的基因变异数据分布式存储方法及架构,通过采用新的列式存储引擎kudu进行数据分布式存储,并针对各样本列建立分布式局部位图索引,有效解决现有的hdfs方案随机数据访问性能低的问题;解决hbase方案批量分析性能不佳的问题;简化存储架构模型;解决基因型查询工具对多个工具依赖的限制问题;同时本发明通过分布式的局部位图索引方案,实现了高并发,并提高了可拓展性。为实现上述目的,本发明所提供的技术方案为:一种基因变异数据分布式存储方法,包括分布式数据存储过程、分布式位图索引创建过程和分布式查询检索过程;所述分布式数据存储过程包括以下步骤:s1、对vcf文件进行预处理,将vcf头部切除,将vcf文件纵向切分成元数据信息和样本基因型信息两部分,并将样本基因型数据进一步纵向切分成所需大小的数据集;s2、对步骤s1中的各份数据,在列式存储kudu中创建对应的元数据表及样本表,根据vcf文件中的表头信息,指定各表的列名、列属性、主键列,并采用键值对保存样本与样本所属表格的对应关系;s3、为步骤s2中各个表指定统一的分区方式,即将表水平切分成多个tablet分片;s4、将步骤s1预处理后的数据加载到前述步骤所创建的kudu表格中;所述分布式位图索引创建过程包括以下步骤:s5、扫描kudu中样本表各数据列,统计各列的属性基数并记录属性值;s6、并发从多个节点上扫描样本表各tablet分片的数据列,对步骤s5中得到的列的各个属性值分别建立位图索引,若数据值等于属性值,则置该属性位图的位为1,否则置为0;s7、对步骤s6中得到的位图索引进行压缩;s8、将步骤s7中得到的压缩后的局部位图索引保存在当前节点上;s9、在主节点上生成位图索引的元数据信息,保存索引对应的表名、tablet序号、索引范围及所在节点位置信息;所述分布式查询检索过程包括以下步骤:s10、解析查询语句,根据查询语句中的样本名确定查询所涉及的表,根据范围过滤词确定对应的tablet分片,根据关键词确定查询类型,对查询进行分发,若查询为行记录读取,则执行步骤s11,否则执行步骤s12;s11、通过impala提交查询,impala生成执行树从对应tablet中读取数据并组装成行返回;s12、访问主节点,读取步骤s9中的索引元数据信息,并发从查询所涉及的tablet分片所在节点读取局部位图索引,根据查询类型进行bitwise操作,并将各节点结果汇合,得到最终的位信息,将位信息解析成vcf位点信息并返回。作为上述方案的改进,所述步骤s1中切分依据可以为样本的表型或族系信息,将具有相同表型或族系的样本划分为一个数据集。作为上述方案的改进,所述步骤s2中各表应指定相同的主键列,优选为基因位点pos列,方便后续表间的联结操作。作为上述方案的进一步改进,所述步骤s3中的分区目的是使得查询均匀分布在各个分区上,以提高查询的并发性,优选为rangepartition,此外分区数量与分区大小应该取得平衡,分区过小会导致吞吐量不佳进而影响性能,优选的分区大小应不小于1gb。作为上述方案的进一步改进,所述步骤s4中可使用impala批量导入加载数据,提高数据加载速度。作为上述方案的进一步改进,所述步骤s6中多节点的选择可以为各tablet分片所在的leader节点,采用mapreduce框架加速创建过程。作为上述方案的更进一步改进,所述步骤s7中位图压缩的原则是使得位图占用的存储空间小同时不损失查询时的速度,即压缩的同时使得可以不进行解压缩就直接查询,优选为wah压缩方法。作为上述方案的更进一步改进,所述步骤s8中位图保存原则是使得局部位图索引在节点上持久化并能快速定位到所需的位图,采用文件进行位图保存,文件包含头部区及数据区,头部区应为各位图在文件中的偏移值,数据区保存位图的实际数据,数据区按数据列、属性值的顺序保存各位图,即先保存第一列各属性的位图,再保存第二列各属性的位图,以此类推。作为上述方案的更进一步改进,所述步骤s12中在第一次访问主节点后应将元数据信息缓存到内存,减小主节点的压力同时提高元数据访问效率,位图索引读取的原则为尽可能提高并发度,优选使用mapreduce框架进行分布式处理,及采用avx2指令集进行simd操作。一种基因变异数据分布式存储架构,包括分布式列式存储模块、分布式位图索引模块和查询检索模块,其中:所述分布式列式存储模块包括预处理器和kudu列式存储引擎;所述预处理器用于对vcf文件进行预处理,切除vcf头部信息,将vcf文件进行纵向切分,生成元数据信息和样本基因型信息两部分,并将样本基因型数据按表型或族系进一步纵向切分成所需大小的数据集;所述kudu列式存储引擎用于分布式存储基因变异数据,作为检索分析操作的基础数据及索引的源数据,kudu提供高可扩展性、强一致性,并提供低延迟的随机读写和高效率的批量读写能力;所述分布式位图索引模块包括位图创建子模块和位图分布式存储子模块;所述位图创建子模块读取各表各tablet分片数据,对各列建立位图,并采用wah方法进行压缩;所述位图分布式存储子模块将压缩后的位图保存在文件中,同时在文件头部保存位图在文件内的偏移值,将位图文件分布式存储在节点上,能够选择存储在tablet对应的leader节点;所述查询检索模块包括查询解析器、impala和位图查询子模块;所述查询解析器对查询语句进行解析,根据样本名与表的键值对确定所涉及的表,根据给定的范围限定结合tablet元数据确定所涉及的tablet分片,根据查询类型对查询进行分发;所述impala用于执行对kudu表的行级查询;所述位图查询子模块用于读取索引元数据信息,获得索引所在的节点位置,并发从查询所涉及的tablet分片所在节点读取局部位图索引,根据查询类型进行bitwise操作并返回结果。本发明与现有技术相比,具有如下优点与有益效果:1、与仅基于hdfs或仅基于hbase的存储方案相比,本发明采用kudu列式存储引擎存储基因变异数据,相比hdfs拥有更好的随机读取能力,相比hbase具有更高的批量处理效率。2、与基于hdfs+hbase的混合模型相比,本发明采用kudu列式存储,简化了存储架构,降低了数据维护的难度,减少了数据的冗余。3、与不结合位图索引的列式存储方案相比,本发明通过分布式位图计算,可以大幅提高行级基因频率统计等任务的效率。4、与基因型查询功能相比,本发明以列式存储kudu为基础生成索引,减少了对其它工具的依赖,降低了使用学习成本;并且本发明针对列的每个属性均建立索引,解决了一些基因查询工具将变异简单划分为“0/0”、“0/1”、“1/1”、“./.”四种情况造成的查询问题;同时本发明通过分布式的位图索引,增强了架构的可拓展性,利用并行计算提高了位图检索的效率。附图说明图1为本发明的基因变异数据分布式存储方法的流程图。图2为本发明的基因变异数据分布式存储架构图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。如图1所示,本发明所提供的基因变异数据分布式存储方法,包括以下步骤:s1、对vcf文件进行预处理,将vcf头部切除,将vcf文件纵向切分成元数据信息和样本基因型信息两部分,并将样本基因型数据按照表型或族系信息进一步纵向切分成更小的数据集;元数据信息包括变异位点id、参考序列、等位序列、质量分数、过滤结果、测序深度等信息,样本基因型信息包括样本在变异位点上的变异情况信息;s2、对步骤s1中的各份数据,在列式存储kudu中创建一个元数据表及多个样本表,根据vcf文件中的表头信息,指定各表的列名、列属性(int、string等)、主键列等,各表均指定基因位点pos列为主键列,同时采用键值对保存样本与样本所属表格的对应关系;s3、为步骤s2中各个表指定统一的range分区,将表水平切分成多个tablet分片,应保证range分区后各tablet分片大小不小于1gb;s4、使用impala将步骤s1预处理后的数据批量导入到前述步骤所创建的kudu表格中;s5、扫描kudu中样本表各数据列,统计各列的属性基数并记录属性值;s6、并发从样本表各tablet分片所在的leader节点上扫描tablet的各数据列,使用mapreduce框架对步骤s5中得到的列的各个属性值分别建立位图索引,若数据值等于属性值,则置该属性位图的位为1,否则置为0;s7、对步骤s6中得到的位图索引采用wah方法进行压缩;s8、将步骤s7中得到的压缩后的局部位图索引保存在当前节点上,即将tablet对应的局部位图索引保存在该tablet的leader节点上,位图采用文件形式进行保存,文件包含头部区及数据区,头部区应为各位图在文件中的偏移值,数据区保存位图的实际数据,数据区按数据列、属性值的顺序保存各位图,即先保存第一列各属性的位图,再保存第二列各属性的位图,以此类推;s9、在主节点上生成位图索引的元数据信息,保存索引对应的表名、tablet序号、索引范围(主键列min和max值)及所在节点位置信息;s10、解析查询语句,根据查询语句中的样本名确定查询所涉及的表,根据范围过滤词确定对应的tablet分片,根据关键词确定查询类型,对查询进行分发,若查询为行记录读取,则执行步骤s11,否则执行步骤s12;s11、通过impala提交查询,impala生成执行树从对应tablet中读取数据并组装成行返回;s12、访问主节点,读取步骤s9中的索引元数据信息并缓存在内存,获得索引所在的节点位置,并发从查询所涉及的tablet分片所在节点读取局部位图索引,根据查询类型进行bitwise操作,bitwise操作使用avx2指令集实现指令级并行,并将各节点结果汇合,得到最终的位信息,将位信息解析成vcf位点信息并返回。具体案例:以一个6节点的hadoop集群(1个kudumasterserver,5个kudutabletserver,5个impaladeamon),一个包含400个样本、1200万条变异记录的vcf文件为例,说明本发明方法的实施过程。具体包括以下步骤:步骤1:对vcf文件进行预处理,将以“##”开头的vcf头部切除,将vcf文件纵向切分成元数据信息和样本基因型信息两部分,元数据信息为vcf文件前9列,包括pos、alt、ref、qual、filter、info等信息,然后将样本基因型数据按照表型或族系信息进一步纵向切分成更小的数据集,假设样本1~样本200为一个数据集,样本201~样本400为另一个数据集,预处理后切分得到元数据文件、样本集1、样本集2等3个数据文件;步骤2:在列式存储kudu中创建一个元数据表meta及两个样本表sampletable1、sampletable2,元数据表meta各列分别为pos、id、alt、ref、qual、filter、info、format,样本表sampletable1各列分别为pos、样本1~样本200,样本表sampletable2各列分别为pos、样本201~样本400,三个表均指定pos列为主键列,同时采用键值对保存样本与样本所属表格的对应关系,如(样本1,sampletable1),(样本201,sampletable2);步骤3:为上述三个表指定rangepartition分区,假设1~400万记录为第一个tablet分片,400万~800万为第二个tablet分片,800万~1200万为第三个tablet分片,该步骤结束后,每个表对应三个数据分片;步骤4:启动impalashell,将步骤1中预处理后的3个数据文件分别导入到对应的kudu表格中;步骤5:扫描sampletable1和sampletable2两个表的各数据列,统计各列的属性基数并记录属性值,假设各列均为“0/0”、“0/1”、“1/1”、“./.”四个属性;步骤6:假设sampletable1三个tablet分片的leader分别在node1、node2、node3上,则并发从node1、node2、node3节点上扫描这三个tablet分片,在每个节点上使用mapreduce框架对各分片进行处理,建立列的各个属性值的位图索引,每一列均会生成“0/0”、“0/1”、“1/1”、“./.”四个位图,对sampletable2进行相同操作;步骤7:对步骤6中得到的位图索引采用wah方法进行压缩;步骤8:将压缩后的局部位图索引保存在当前节点上,如sampletable1三个tablet分片对应的局部位图索引分别位于node1、node2、node3上,位图采用文件形式进行保存,文件包含头部区及数据区,头部区应为各位图在文件中的偏移值,数据区保存位图的实际数据,数据区按数据列、属性值的顺序保存各位图,即先保存第一列各属性的位图,再保存第二列各属性的位图,以此类推,根据偏移值可以快速定位到位图在文件中的位置,如第二列的“0/0”索引应该在第五个偏移值对应处(前4个偏移分别对应第一列的4个位图索引);步骤9:在kudumaster节点上生成位图索引的元数据信息,保存索引对应的表名、tablet序号、索引范围(主键列min和max值)及所在节点位置信息,该例对应的索引元数据信息如下所示:步骤10:解析查询语句,根据查询语句中的样本名确定查询所涉及的表,根据范围过滤词确定对应的tablet分片,根据关键词确定查询类型,对查询进行分发;步骤11:若查询为行级,则通过impala接口提交查询至impala,impala生成执行树从对应tablet中读取数据组装返回;步骤12:若查询为列级统计或每行的allelecount统计,则访问主节点,读取索引元数据信息缓存在内存,获得索引所在的节点位置,并发从查询所涉及的tablet分片所在节点读取局部位图索引,根据查询类型进行bitwise操作。假设查询样本1和样本2基因型均为“1/1”的位点,则分别在node1、node2、node3上读取样本1和样本2的“1/1”局部位图索引,在各节点对位图通过avx2指令集进行and操作,将3个节点上的局部结果进行合并返回。如图2所示,本发明所提供的基于列式存储和位图索引的基因变异数据分布式存储架构,包括分布式列式存储模块,分布式位图索引模块和查询检索模块,其中:分布式列式存储模块包括预处理器和kudu列式存储引擎;预处理器用于对vcf文件进行预处理,切除vcf头部信息,将vcf文件进行纵向切分,生成元数据信息和样本基因型信息两部分,并将样本基因型数据按表型或族系进一步纵向切分成更小的数据集;kudu列式存储用于分布式存储基因变异数据,作为检索分析操作的基础数据及索引的源数据,kudu提供高可扩展性、强一致性,并提供低延迟的随机读写和高效率的批量读写能力;分布式局部位图索引模块包括位图创建子模块和位图分布式存储子模块;位图创建子模块读取各表各tablet分片数据,对各列建立位图,并采用wah方法进行压缩;位图分布式存储子模块将压缩后的位图保存在文件中,同时在文件头部保存位图在文件内的偏移值,将位图文件分布式存储在节点上,可以选择存储在tablet对应的leader节点;查询检索模块包括查询解析器、impala和位图查询子模块;查询解析器对查询语句进行解析,根据样本名与表的键值对确定所涉及的表,根据给定的范围限定结合tablet元数据确定所涉及的tablet分片,根据查询类型对查询进行分发;impala用于执行对kudu表的行级查询;位图查询子模块用于读取索引元数据信息,获得索引所在的节点位置,并发从查询所涉及的tablet分片所在节点读取局部位图索引,根据查询类型进行bitwise操作并返回结果。总之,针对基因变异数据检索场景的要求,本发明利用一种基于列式存储和位图索引的基因变异数据分布式存储架构进行数据的有效存储,进而优化查询检索的性能。以上所述实施例只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1