CN110299187B - 一种基于Hadoop的并行化基因数据压缩方法 - Google Patents

一种基于Hadoop的并行化基因数据压缩方法 Download PDF

Info

Publication number
CN110299187B
CN110299187B CN201910597641.2A CN201910597641A CN110299187B CN 110299187 B CN110299187 B CN 110299187B CN 201910597641 A CN201910597641 A CN 201910597641A CN 110299187 B CN110299187 B CN 110299187B
Authority
CN
China
Prior art keywords
sequence
information
character
compressed
gene
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910597641.2A
Other languages
English (en)
Other versions
CN110299187A (zh
Inventor
季一木
方厚之
尧海昌
李奎
刘尚东
陈帅
刘强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University of Posts and Telecommunications
Original Assignee
Nanjing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University of Posts and Telecommunications filed Critical Nanjing University of Posts and Telecommunications
Priority to CN201910597641.2A priority Critical patent/CN110299187B/zh
Publication of CN110299187A publication Critical patent/CN110299187A/zh
Application granted granted Critical
Publication of CN110299187B publication Critical patent/CN110299187B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16BBIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
    • G16B50/00ICT programming tools or database systems specially adapted for bioinformatics
    • G16B50/50Compression of genetic data

Landscapes

  • Health & Medical Sciences (AREA)
  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Biology (AREA)
  • Biophysics (AREA)
  • Databases & Information Systems (AREA)
  • Genetics & Genomics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Biotechnology (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于Hadoop的并行化基因数据压缩方法,事先从待压缩基因序列中选取并通过k‑mer构建Hash表编码参考序列,并将参考序列存储为索引文件。启动Hadoop集群,将配置、索引和待压缩文件传到HDFS上,配置MapReduce任务,在Map任务中读取待压缩序列的所有信息,使用Combiner与Partitioner对Map结果优化。在Reduce任务中进行待压缩序列与参考序列的匹配去重,最后将结果压缩输出。本发明使用分布式计算方式可以在读取单个基因实现并行化并提高效率,还可以实现多条基因序列的并行处理,以实现处理压缩大批量基因文件的加速。

Description

一种基于Hadoop的并行化基因数据压缩方法
技术领域
本发明涉及一种基于Hadoop平台实现集群并行压缩基因序列的方案,属于大数据领域。
背景技术
基因是DNA上有遗传效应的片断,和生命息息相关。基因数据因其重要的社会价值和科研价值受到国际社会的广泛重视。面对如此庞大并仍在不断增长的基因数据,以压缩算法对大量基因数据压缩可以减轻基因文件的存储和数据迁移压力,在基因研究和应用中显得尤为重要。
基于基因的压缩算法多运行于单机环境,而单机环境中面对大量基因序列时会变得效率低下;并且对于多条数据而言需要多次运行算法才可以实现全部序列的压缩。这样串行模式虽然占用资源低,但在处理大批量数据时会产生较高延迟。为了解决这种情况,考虑使用多机并行的方式来对基因文件进行并行处理,进而推广到云计算领域,使用分布式集群来大大加速压缩过程,在面对大基因序列文件以及多条基因序列的时候会有更好的效果。
发明内容
发明目的:为了克服现有技术中存在的不足,本发明提供一种基于Hadoop的并行化基因数据压缩方法,本方法使用Hadoop作为大数据平台来进行分布式运算,它能将一个大片段基因分成多个小片操作,也可以针对多条基因序列分配多个计算节点来对这些不同的基因序列并行计算。将Hadoop的批处理并行化优势与基因的压缩算法结合起来,实现一个新的压缩方法,可以充分利用网络上的服务器资源,使用多台节点的计算能力大大缩短大量基因压缩的时间,以达到提高效率的目的。
技术方案:为实现上述目的,本发明采用的技术方案为:
一种基于Hadoop的并行化基因数据压缩方法,使用Hadoop框架规划运行一种基于参考序列的基因匹配压缩方法。将一个或多个基因文件在不同节点上分块并行读取并转化成二元组形式表示基因序列,并与参考序列匹配去除重复部分,保留不同的部分,提高压缩效率,通过多节点计算也可实现快速的压缩与高效稳定的存储,包括以下步骤:
步骤1,读取并编码参考序列,上传待压缩序列到分布式集群环境中;参考序列中只需提取ACGT字符信息和小写字符位置信息,记录参考序列小写字符位置信息,将参考序列的小写字符转化成大写字符,将这些大写字符信息按照{A=0;C=1;G=2;T=3}的方式进行数字编码,ACGT字符信息使用数组进行存储,小写字符信息使用<在序列中与上一个二元组的偏移位置Position,长度Length>的二元组形式存储,并将其上传到分布式文件系统上;
步骤2,使用k-mer算法读取编码后参考序列计算Hash值并创建Hash表;以所有的k-mer算法计算的Hash值来索引k-mer序列;统计出的信息包含转化后的大写字符和小写字符向量,将信息存储在一个文件里,将其作为索引文件,通过分布式缓存DistributedCache分发到每一台处理节点上,对其直接进行本地调用会提高处理效率与减少网络传输的压力,为之后Reduce阶段的匹配做准备,在运行MapReduce的时候使用DistributedCache上传到从属节点作为缓存;
步骤3,读取待压缩序列;对于许多个待压缩序列会被分配到许多DataNode计算节点之中,使用Map任务对其进行读取;对于待压缩序列需要提取它的全部信息,首先是它的序列名称信息,将其暂存于数组中,之后将其作为MapReduce输出的key中的一部分来输出到下一步骤;其次是序列中的ACGT字符信息与小写字符位置信息、N字符位置信息、特殊字符信息和换行符信息,其中大写字符信息使用数组存储,小写字符位置信息与N字符信息使用<偏移位置Position,长度Length>的二元组形式存储,特殊字符信息按照<特殊字符,偏移位置>的二元组形式存储,换行符信息使用数字来表示它在序列的位置;在处理完之后,Map任务需要通过Stdout标准输出流将这些信息按照一行<key,value>信息的形式发送到Reduce节点作下一步处理;按行读取待压缩序列并按行输出其不同字符信息的<key,value>对,其中,key规划为{序列名称信息.字符种类},两个名称之间用标识符隔开,value根据不同信息来规划不同的输出,其中二元组信息使用自定义标识符隔开,以便之后处理;
步骤4,使用Map任务输出端的配置调优来优化输出;由于一个Slave节点往往需要处理大量的基因数据,故会产生大量的输出,而Map任务对此输出有固定的缓存区域,若满则只有溢出至硬盘;要避免多次的硬盘读写来获得最大效能,需要通过合理设置mapreduce.task.io.sort.*属性以给Map之后的shuffle阶段尽量提供充足的空间,预估Map的输出大小,使其输出<key,value>的排序全部在内存中进行;
步骤5,通过实现combiner来减少每个Map任务的输出以减轻磁盘读写负担;将步骤3输出的<key,value>按照同一基因序列的同一字符类型的key进行初步归约,把每个基因序列读取出的许多行字符或向量的<key,value>整合为一行字符或一行二元组,大大缩小了网络传输的负担;
步骤6,使用自定义的Partitioner类将有相同序列名称的key分配给同一个Reduce任务;经过归约之后,一个Reduce任务会获取到一个基因文件的所有序列,以实现后续步骤的使用完整待压缩序列与参考序列的匹配去重;
步骤7,将参考序列与待压缩序列匹配去重;在Reduce任务中完成,指定Reduce任务个数必须要与待压缩基因的个数相同,在Reducer工作节点中将步骤2中读取编码后的参考序列文件通过分布式缓存导入,对步骤4中传输的基因序列压缩文件先解压,在对这些<key,value>对进行内存读取,之后将其与参考序列作初步匹配;基因序列中主要是大写与小写的ACGT信息,所以在匹配阶段只对这些信息进行去重操作:首先考虑大写的字符信息,把待压缩序列的大写字符信息按照与步骤2中相同的k-mer算法计算哈希值,在参考序列所建立的哈希表中寻找相同值的序列进行比较,选取最长匹配序列,以<偏移位置,长度>的二元组形式保存;若有未匹配的序列,以<偏移位置,未匹配字符>的二元组形式保存其位置与内容;之后再考虑小写字符信息,由于参考序列与待压缩序列的小写字符都是以二元组形式存储在一个数组里的,将其按数组位进行比对,若有同的向量,则将其在数组的位置保存在数组之中,若有不相同的向量,直接按照初始形式存储;
步骤8,对压缩后信息进行保存:将除ACGT信息与其余信息使用标准输出流输出,采取codec压缩输出,保证最后各个Reduce输出的内容可以得到最大压缩率;Hadoop将这些标准输出流中的内容保存为分布式文件系统上的文件,分布式地保存在各个节点之上。
优选的:步骤2中k-mer算法是指将一行读取到的基因序列分成包含k个碱基的字符串,一般长短为m的序列分成m-k+1个k-mers;当k取合适值时,DNA序列中k-mer频数分布包含了基因组的全部信息,从而构成序列的一个等价表示。
优选的:步骤3中指定Map任务的个数尽量与计算节点个数相同,可以发挥最大效能。
优选的:步骤8中其余信息包括N字符、特殊字符与换行符信息。
优选的:换行符信息由于重复率很高需要进一步压缩,最后保存其个数
本发明相比现有技术,具有以下有益效果:
本发明所提出的基于分布式并行计算的基因压缩方法,可以对单个基因并行读取,并且可以并行处理压缩多条基因序列,提高了基因压缩的速率。在压缩阶段通过与参考序列匹配去重的方法消除了大量重复的基因序列,并通过codec方式将计算结果再次压缩,提高了基因的压缩率。
附图说明
图1基于多节点多序列的并行压缩方法框架图
图2并行基因压缩程序的流程图
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
一种基于Hadoop的并行化基因数据压缩方法,实现单条基因序列读取过程中的并行化与多条基因全过程的并行化,以提高基因文件压缩速率。该方案分为Map与Reduce两个阶段,在Map阶段实现了对基因文件分片并行化读取,Reduce阶段实现多条待压缩序列并行地与参考序列的匹配去重,中间穿插着参考序列的读取上传与对计算节点输出的调优,最终以达到实现压缩与提高基因压缩速率的目的,如图1、2所示,包括以下步骤:
步骤1,读取并编码参考序列,上传待压缩序列到分布式集群环境中;因为参考序列中N字符信息、特殊字符信息和换行符信息存储代价很小,没有匹配价值,所以参考序列无需提取这三个信息,只需提取ACGT字符信息和小写字符位置信息,记录参考序列小写字符位置信息,将参考序列的小写字符转化成大写字符,将这些大写字符信息按照{A=0;C=1;G=2;T=3}的方式进行数字编码,ACGT字符信息使用数组进行存储,小写字符信息使用<在序列中与上一个二元组的偏移位置Position,长度Length>的二元组形式存储,并将其上传到分布式文件系统上;
步骤2,使用k-mer算法读取编码后参考序列计算Hash值并创建Hash表;以所有的k-mer算法计算的Hash值来索引k-mer序列;统计出的信息包含转化后的大写字符和小写字符向量,将信息存储在一个文件里,将其作为索引文件,通过分布式缓存DistributedCache分发到每一台处理节点上,对其直接进行本地调用会提高处理效率与减少网络传输的压力,为之后Reduce阶段的匹配做准备,在运行MapReduce的时候使用DistributedCache上传到从属节点作为缓存;
k-mer算法是指将一行读取到的基因序列分成包含k个碱基的字符串,一般长短为m的序列可以分成m-k+1个k-mers。当k取合适值时,DNA序列中k-mer频数分布包含了基因组的全部信息,从而构成序列的一个等价表示。使用k-mer匹配会更加精准快速,Hash表的创建不再是将庞大的序列全部转化成整数数组,而是基于k-mer逐段创建。这样会节省复杂的Hash计算,简化Hash表创建过程,节省Hash表创建的内存消耗。
步骤3,读取待压缩序列;对于许多个待压缩序列会被分配到许多DataNode计算节点之中,使用Map任务对其进行读取,指定Map任务的个数尽量与计算节点个数相同,可以发挥最大效能。对于待压缩序列需要提取它的全部信息,首先是它的序列名称信息,将其暂存于数组中,之后将其作为MapReduce输出的key中的一部分来输出到下一步骤;其次是序列中的ACGT字符信息与小写字符位置信息、N字符位置信息、特殊字符信息和换行符信息,其中大写字符信息使用数组存储,小写字符位置信息与N字符信息使用<偏移位置Position,长度Length>的二元组形式存储,特殊字符信息按照<特殊字符,偏移位置>的二元组形式存储,换行符信息使用数字来表示它在序列的位置;在处理完之后,Map任务需要通过Stdout标准输出流将这些信息按照一行<key,value>信息的形式发送到Reduce节点作下一步处理;按行读取待压缩序列并按行输出其不同字符信息的<key,value>对,其中,key规划为{序列名称信息.字符种类},两个名称之间用标识符隔开,value根据不同信息来规划不同的输出,其中二元组信息使用自定义标识符隔开,以便之后处理;
步骤4,使用Map任务输出端的配置调优来优化输出;由于一个Slave节点往往需要处理大量的基因数据,故会产生大量的输出,而Map任务对此输出有固定的缓存区域(100M),若满则只有溢出至硬盘;要避免多次的硬盘读写来获得最大效能,需要通过合理设置mapreduce.task.io.sort.*属性以给Map之后的shuffle阶段尽量提供充足的空间,预估Map的输出大小,使其输出<key,value>的排序全部在内存中进行;
步骤5,通过实现combiner来减少每个Map任务的输出以减轻磁盘读写负担;将步骤3输出的<key,value>按照同一基因序列的同一字符类型的key进行初步归约,把每个基因序列读取出的许多行字符或向量的<key,value>整合为一行字符或一行二元组,大大缩小了网络传输的负担;
步骤6,使用自定义的Partitioner类将有相同序列名称的key分配给同一个Reduce任务;经过归约之后,一个Reduce任务会获取到一个基因文件的所有序列,以实现后续步骤的使用完整待压缩序列与参考序列的匹配去重;
步骤7,将参考序列与待压缩序列匹配去重;在Reduce任务中完成,指定Reduce任务个数必须要与待压缩基因的个数相同,在Reducer工作节点中将步骤2中读取编码后的参考序列文件通过分布式缓存导入,对步骤4中传输的基因序列压缩文件先解压,在对这些<key,value>对进行内存读取,之后将其与参考序列作初步匹配;基因序列中主要是大写与小写的ACGT信息,所以在匹配阶段只对这些信息进行去重操作:首先考虑大写的字符信息,把待压缩序列的大写字符信息按照与步骤2中相同的k-mer算法计算哈希值,在参考序列所建立的哈希表中寻找相同值的序列进行比较,选取最长匹配序列,以<偏移位置,长度>的二元组形式保存;若有未匹配的序列,以<偏移位置,未匹配字符>的二元组形式保存其位置与内容(一般为一小串序列);之后再考虑小写字符信息,由于参考序列与待压缩序列的小写字符都是以二元组形式存储在一个数组里的,将其按数组位进行比对,若有同的向量,则将其在数组的位置保存在数组之中,若有不相同的向量,直接按照初始形式存储;
步骤8,对压缩后信息进行保存:将除ACGT信息与其余信息(N字符、特殊字符与换行符信息)使用标准输出流输出,其中换行符信息由于重复率很高(基因文件每行几乎等长)需要进一步压缩,最后保存其个数。采取codec压缩输出,保证最后各个Reduce输出的内容可以得到最大压缩率;Hadoop将这些标准输出流中的内容保存为分布式文件系统上的文件,分布式地保存在各个节点之上。
本发明将基因压缩算法的读取阶段规划给Map任务。针对一条基因序列而言,在Map阶段对这条待压缩的基因序列分片并对分片部分并行读取。主要读取基因的序列名称信息、ACGT大写字符信息、小写字符信息、N字符信息、X或其它字符信息与基因文件的每一行的换行信息。将序列名称信息以key的形式发送到下一阶段;小写字符信息(可能有ACGT、N、X等特殊字符的小写形式)需标注出在一行中出现的位置与长度并用<偏移位置,长度>的二元组形式表示,随后小写字符全部转化成大写字符储存;ACGT大写字符信息直接保存为字符数组形式;N字符信息保存为与小写字符信息相同的二元组形式;特殊字符信息以<特殊字符,偏移位置>的二元组表示;换行符使用整数数组表示,表示为在一行末尾的位置数字。将这些数据通过stdout以<key,value>对的形式通过MapReduce框架输出到Reduce阶段作进一步的处理,其中key的形式为{序列名称信息.基因字符种类},其中基因字符种类就是基因序列中的各类字符名称,将这两种信息用标识符分割,以便之后读取。而value就是这些种类字符的值,包含定义的二元组形式与字符数组形式。将这些键值对通过标识符分隔,将这些二元组用另一种标识符分割,以便之后读取确认。在Map阶段实现多节点对于单条基因分片部分读取的并行化,以提高其压缩速度。
选择参考序列,事先编码后作为索引文件放到工作环境中,以供Reduce任务使用。可以选取同一条染色体的所有基因序列作为参考序列。参考序列只选用ACGT信息作为匹配参考,其余信息不作考虑。首先要将参考序列的ACGT小写字符全部转化为大写,再将这些ACGT信息按照{A=0;C=1;G=2;T=3}的形式编码,将这些序列依据k-mer进行分段并逐段计算Hash值并创建Hash表,用于索引k-mer序列。并将Hash表与参考序列的字符信息保存到文件中,在执行分布式计算任务之前使用DistributedCache上传到每个Reduce计算节点作为缓存,在任务中直接读取以加速匹配进程。
将基因压缩算法匹配阶段规划给Reduce任务完成。此时若有多条待压缩基因则可以设置多个Reduce节点,不过要保证Reduce节点数与待压缩基因数目相同。在Reduce任务中从DistributedCache上导入预先编码好的参考序列。在stdin之中按行读取从上一任务发过来的<key,value>对,读取key中的内容,并给key对应字符种类的基因数据分配连续内存空间,并将value中的数据存储进该数组。缓存完毕之后开始与参考序列匹配,匹配ACGT大写字符,将待压缩序列按照{A=0;C=1;G=2;T=3}编码,选取k-mer计算并每个k-mer的Hash值之后进入参考序列的Hash表中寻找相同Hash值的序列。为了达到最佳匹配效果,需要寻找最长的序列,并将这段字符串替换为使用起始位置与长度的二元组形式表示已达到去重效果。对于未匹配到的零散字符,将其以字符形式直接储存。对于ACGT小写字符向量信息也需要与参考序列匹配去重,将待压缩序列中有着相同元素的向量用该向量在数组的位置信息保存,保存至一个一维整形数组之中,保存相同二元组之间的偏移位置。将这些信息通过stdout直接输出至框架的缓存区。对于其他不需要匹配的信息,将换行符信息使用偏移位置表示各行末尾位置,并将这些信息直接输出到stdout。框架会将缓存区的字符信息输出至一个文件之中,Reduce阶段的输出缓存区的大小应大致与Map输出设置的缓存区大小相等。
在Map输出端需要使用Combiner与Partitioner任务与配置调优来优化Map的大量输出,以减轻Reduce的写入负担与网络传输压力。对于Map输出端的缓存区需要调整至与一个数据块相同大小,以防止缓存溢出写入磁盘降低处理效率。在Combiner类中将有着相同基因字符种类key的value值合并到一个key之中,输出结果为key({序列名称信息.基因字符种类}),value(同一个基因字符种类的所有值,字符或二元组)。Partitioner类中实现OutputFormat<k,v>接口,按照输出key({序列名称信息.基因字符种类})的标识符来识别前半部分,分析其所属的基因序列并合并到一个Reduce任务之中。
实例:
1、读取预先选取的参考序列信息,上传待压缩序列到分布式集群环境中。记录参考序列小写字符位置信息,将参考序列的小写字符转化成大写字符,将这些大写字符信息按照{A=0;C=1;G=2;T=3}的方式进行数字编码,按照k-mer算法生成Hash表。小写字符位置信息记录成二元组,所有转化后的ACGT大写字符以字符数组的形式保存在文件里,并将其上传到HDFS文件系统上,在运行MapReduce的时候使用DistributedCache上传到从属节点作为缓存。
2、将待压缩的基因上传到HDFS上,则按照一个数据块128M的大小(默认)分配给各个计算节点。期间要保持各个节点运行正常,可以在NameNode上实时检测到节点的信息。
3、通过Map任务来实现读取待压缩序列。在MapReduce的Job中根据待压缩基因的个数来定义Map任务的个数与Map计算的数据块,每一个Map任务对应一个集群中的计算节点(DataNode)可以获得最大收益,每一个Map对应操作的数据块应与HDFS的分片大小相同。指定Reduce任务的个数必须与待压缩的基因数量相同。
4、在Map操作函数中对一条基因序列的一部分(若基因大小小于分片大小则为基因的全部)进行处理。首先读取其序列名称信息,将其作为key的一部分输出到下一阶段。之后按行读取文件中的大写字符、小写字符、N字符、其他字符和换行符信息。将小写字符转化成大写字符之后,将所有大写的ACGT信息存储到字符数组中,小写字符、N字符使用<偏移位置,长度>的二元组形式存储,其他字符使用<特殊字符,偏移位置>的二元组存储,行宽以整数直接存储。将这些信息分别输出为<key,value>对,若value为二元组,则定义标识符来分割二元组之间的变量。
5、在Map输出后,作输出缓冲的配置调优。为stdout在输出缓冲区提供适当的空间,一般与Map操作的数据块大小相等。在当前工作节点运行Combiner与Partitioner文件,优化Map端的大量输出。在Combiner类中将有着相同基因字符种类key的value值合并到一个key之中,输出结果为key({序列名称信息.基因字符种类}),value(同一个基因字符种类的所有值,字符或二元组)。Partitioner类中实现OutputFormat<k,v>接口,按照输出key({序列名称信息.基因字符种类})的标识符来识别前半部分,分析其所属的基因序列并合并到一个Reduce任务之中。
5、在Reduce工作节点上进行同一条基因序列与参考序列的匹配去重。首先需要将参考序列从DistributeCache中导入到Reduce操作函数中,将输入的<key,value>去除key与value之间的标识符,读取value,然后再把含二元组形式的value去除标识符。之后分别在内存开辟连续空间,将二元组与字符信息分别顺序存储。接下来与参考序列进行大写字符的匹配,将待压缩序列的大写字符数组按与1)相同的方式按k-mer进行Hash编码并与参考序列的Hash表作匹配,由此找到最长匹配序列,并将其用二元组表示。之后匹配小写字符向量,删去多余的向量并以数字表示。除ACGT之外的信息直接输出至stdout。选择压缩输出方式为gzip,以获得最大压缩率。
6、压缩输出的文件保存在HDFS上,可以使用Hadoop指令下载该文件。
本发明首先选取参考序列,对其进行二元组编码与Hash编码后存储为索引文件。之后将待压缩序列分布式地存储在处理集群中,使用MapReduce对这些分布的待压缩序列数据块并行读取并编码,再归并到一台节点与参考序列匹配去重,从而实现全过程的加速。如果集群节点较多,也可以实现多条基因序列并行去重压缩,使用分布式计算方式可以在读取单个基因实现并行化并提高效率,还可以实现多条基因序列的并行处理,以实现处理压缩大批量基因文件的加速,解决了基因序列数据过大,存储和传输成本高等问题。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (5)

1.一种基于Hadoop的并行化基因数据压缩方法,其特征在于,包括以下步骤:
步骤1,读取并编码参考序列,上传待压缩序列到分布式集群环境中;参考序列中只需提取ACGT字符信息和小写字符位置信息,记录参考序列小写字符位置信息,将参考序列的小写字符转化成大写字符,将这些大写字符信息按照{A=0;C=1;G=2;T=3}的方式进行数字编码,ACGT字符信息使用数组进行存储,小写字符信息使用<在序列中与上一个二元组的偏移位置Position,长度Length>的二元组形式存储,并将其上传到分布式文件系统上;
步骤2,使用k-mer算法读取编码后参考序列计算Hash值并创建Hash表;以所有的k-mer算法计算的Hash值来索引k-mer序列;统计出的信息包含转化后的大写字符和小写字符向量,将信息存储在一个文件里,将其作为索引文件,通过分布式缓存DistributedCache分发到每一台处理节点上,对其直接进行本地调用会提高处理效率与减少网络传输的压力,为之后Reduce阶段的匹配做准备,在运行MapReduce的时候使用DistributedCache上传到从属节点作为缓存;
步骤3,读取待压缩序列;对于许多个待压缩序列会被分配到许多DataNode计算节点之中,使用Map任务对其进行读取;对于待压缩序列需要提取它的全部信息,首先是它的序列名称信息,将其暂存于数组中,之后将其作为MapReduce输出的key中的一部分来输出到下一步骤;其次是序列中的ACGT字符信息与小写字符位置信息、N字符位置信息、特殊字符信息和换行符信息,其中大写字符信息使用数组存储,小写字符位置信息与N字符信息使用<偏移位置Position,长度Length>的二元组形式存储,特殊字符信息按照<特殊字符,偏移位置>的二元组形式存储,换行符信息使用数字来表示它在序列的位置;在处理完之后,Map任务需要通过Stdout标准输出流将这些信息按照一行<key,value>信息的形式发送到Reduce节点作下一步处理;按行读取待压缩序列并按行输出其不同字符信息的<key,value>对,其中,key规划为{序列名称信息.字符种类},两个名称之间用标识符隔开,value根据不同信息来规划不同的输出,其中二元组信息使用自定义标识符隔开,以便之后处理;
步骤4,使用Map任务输出端的配置调优来优化输出;由于一个Slave节点往往需要处理大量的基因数据,故会产生大量的输出,而Map任务对此输出有固定的缓存区域,若满则只有溢出至硬盘;要避免多次的硬盘读写来获得最大效能,需要通过合理设置mapreduce.task.io.sort.*属性以给Map之后的shuffle阶段尽量提供充足的空间,预估Map的输出大小,使其输出<key,value>的排序全部在内存中进行;
步骤5,通过实现combiner来减少每个Map任务的输出以减轻磁盘读写负担;将步骤3输出的<key,value>按照同一基因序列的同一字符类型的key进行初步归约,把每个基因序列读取出的许多行字符或向量的<key,value>整合为一行字符或一行二元组,大大缩小了网络传输的负担;
步骤6,使用自定义的Partitioner类将有相同序列名称的key分配给同一个Reduce任务;经过归约之后,一个Reduce任务会获取到一个基因文件的所有序列,以实现后续步骤的使用完整待压缩序列与参考序列的匹配去重;
步骤7,将参考序列与待压缩序列匹配去重;在Reduce任务中完成,指定Reduce任务个数必须要与待压缩基因的个数相同,在Reducer工作节点中将步骤2中读取编码后的参考序列文件通过分布式缓存导入,对步骤4中传输的基因序列压缩文件先解压,在对这些<key,value>对进行内存读取,之后将其与参考序列作初步匹配;基因序列中主要是大写与小写的ACGT信息,所以在匹配阶段只对这些信息进行去重操作:首先考虑大写的字符信息,把待压缩序列的大写字符信息按照与步骤2中相同的k-mer算法计算哈希值,在参考序列所建立的哈希表中寻找相同值的序列进行比较,选取最长匹配序列,以<偏移位置,长度>的二元组形式保存;若有未匹配的序列,以<偏移位置,未匹配字符>的二元组形式保存其位置与内容;之后再考虑小写字符信息,由于参考序列与待压缩序列的小写字符都是以二元组形式存储在一个数组里的,将其按数组位进行比对,若有同的向量,则将其在数组的位置保存在数组之中,若有不相同的向量,直接按照初始形式存储;
步骤8,对压缩后信息进行保存:将除ACGT信息与其余信息使用标准输出流输出,采取codec压缩输出,保证最后各个Reduce输出的内容可以得到最大压缩率;Hadoop将这些标准输出流中的内容保存为分布式文件系统上的文件,分布式地保存在各个节点之上。
2.根据权利要求1所述基于Hadoop的并行化基因数据压缩方法,其特征在于:步骤2中k-mer算法是指将一行读取到的基因序列分成包含k个碱基的字符串,一般长短为m的序列分成m-k+1个k-mers;当k取合适值时,DNA序列中k-mer频数分布包含了基因组的全部信息,从而构成序列的一个等价表示。
3.根据权利要求2所述基于Hadoop的并行化基因数据压缩方法,其特征在于:步骤3中指定Map任务的个数尽量与计算节点个数相同,可以发挥最大效能。
4.根据权利要求3所述基于Hadoop的并行化基因数据压缩方法,其特征在于:步骤8中其余信息包括N字符、特殊字符与换行符信息。
5.根据权利要求4所述基于Hadoop的并行化基因数据压缩方法,其特征在于:换行符信息由于重复率很高需要进一步压缩,最后保存其个数。
CN201910597641.2A 2019-07-04 2019-07-04 一种基于Hadoop的并行化基因数据压缩方法 Active CN110299187B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910597641.2A CN110299187B (zh) 2019-07-04 2019-07-04 一种基于Hadoop的并行化基因数据压缩方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910597641.2A CN110299187B (zh) 2019-07-04 2019-07-04 一种基于Hadoop的并行化基因数据压缩方法

Publications (2)

Publication Number Publication Date
CN110299187A CN110299187A (zh) 2019-10-01
CN110299187B true CN110299187B (zh) 2022-03-22

Family

ID=68030049

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910597641.2A Active CN110299187B (zh) 2019-07-04 2019-07-04 一种基于Hadoop的并行化基因数据压缩方法

Country Status (1)

Country Link
CN (1) CN110299187B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110767265A (zh) * 2019-10-23 2020-02-07 中国科学院计算技术研究所 一种针对大数据基因组比对文件排序的并行加速方法
CN111145834B (zh) * 2019-11-29 2023-10-27 中科曙光(南京)计算技术有限公司 多线程基因数据压缩方法、装置
CN111028897B (zh) * 2019-12-13 2023-06-20 内蒙古农业大学 一种基于Hadoop的基因组索引构建的分布式并行计算方法
CN111370070B (zh) * 2020-02-27 2023-10-27 中国科学院计算技术研究所 一种针对大数据基因测序文件的压缩处理方法
CN111627496B (zh) * 2020-05-09 2022-05-17 苏州浪潮智能科技有限公司 一种哈希表的压缩方法、系统及相关装置
CN112764922B (zh) * 2021-01-12 2022-09-16 中国人民解放军国防科技大学 基于负载均衡的并行序列比对方法、装置和计算机设备
CN112765113B (zh) * 2021-01-31 2024-04-09 云知声智能科技股份有限公司 索引压缩方法、装置、计算机可读存储介质及电子设备
CN113810174A (zh) * 2021-09-16 2021-12-17 金蝶软件(中国)有限公司 一种数据处理方法以及相关设备
CN114550833B (zh) * 2022-02-15 2022-10-28 郑州大学 一种基于大数据的基因分析方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103559020B (zh) * 2013-11-07 2016-07-06 中国科学院软件研究所 一种dna读序数据fastq文件并行压缩和解压缩方法
US10192026B2 (en) * 2015-03-05 2019-01-29 Seven Bridges Genomics Inc. Systems and methods for genomic pattern analysis
CN106096332A (zh) * 2016-06-28 2016-11-09 深圳大学 面向存储的dna序列的并行快速匹配方法及其系统
CN106778079B (zh) * 2016-11-22 2019-07-19 重庆邮电大学 一种基于MapReduce的DNA序列k-mer频次统计方法

Also Published As

Publication number Publication date
CN110299187A (zh) 2019-10-01

Similar Documents

Publication Publication Date Title
CN110299187B (zh) 一种基于Hadoop的并行化基因数据压缩方法
US9348835B2 (en) Stopping functions for grouping and differentiating files based on content
EP2344959B1 (en) Index compression in databases
US8972201B2 (en) Compression of genomic data file
TW201837720A (zh) 用於多串流儲存裝置之串流選擇
TW201841123A (zh) 用於維護操作之合併樹修改
CN106778079A (zh) 一种基于MapReduce的DNA序列k‑mer频次统计方法
US11551785B2 (en) Gene sequencing data compression preprocessing, compression and decompression method, system, and computer-readable medium
US20230333764A1 (en) Method and apparatus for compressing data of storage system, device, and readable storage medium
CN111028897B (zh) 一种基于Hadoop的基因组索引构建的分布式并行计算方法
Sirén Burrows-Wheeler transform for terabases
CN115438114B (zh) 存储格式转换方法、系统、装置、电子设备及存储介质
CN113268459A (zh) 基于fastq基因大数据的批量分布式压缩方法
WO2020222727A1 (en) Optimizing storage and retrieval of compressed data
US11403017B2 (en) Data compression method, electronic device and computer program product
Žarković et al. Spontaneous Regression of Cancer: Revealing Granulocytes and Oxidative Stress as the Crucial Double-edge Sword
US11347424B1 (en) Offset segmentation for improved inline data deduplication
CN113760898A (zh) 表连接操作的处理方法和装置
CN111370070B (zh) 一种针对大数据基因测序文件的压缩处理方法
WO2022206144A1 (zh) 数据压缩方法及装置
Zhang et al. A Compatible LZMA ORC-Based Optimization for High Performance Big Data Load
CN111079935B (zh) 一种spark下的机器学习快速大规模样本签名方法
CN115331739A (zh) 一种基于Spark的大规模基因序列无损并行化压缩方法
Lu et al. A compression algorithm of FASTQ file based on distribution characteristics analysis
Li et al. Efficient parallel design for BWT-based DNA sequences data multi-compression algorithm

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant