1.基于fastq基因大数据的批量分布式压缩方法,其特征在于:包括如下步骤:
s100、部署spark集群、hadoop集群和java环境:
将所有参与压缩的fastq文件上传至hdfs上;
在压缩环境中预先选取人类基因组序列hg38的参考序列信息和质量分数序列信息,并且放置到程序本地;
将spark集群调整成yarnstandalone模式,在单独节点启动driver;
s200、选取同种群物种、同一条染色体的fasta文件,作为所有输入的基因序列的参考序列;从作为参考序列的fasta文件应用哈希算法生成第一类参考文件,然后使用广播变量方法上传到每个计算节点的executor进程作为缓存,用于加速匹配进程;
s300、为读取到的碱基序列与标识符序列创建spark任务,此spark任务的输入信息包括fastq文件包含的碱基序列、标识符序列和参考序列,输出信息为包括<参考的序列号,匹配位置,匹配长度>三元组列表,然后转换成可以被二次识别的字符串格式输出至hdfs;并且:
s301、分片读取:
使用mappartition算子对碱基序列与标识符序列进行分片,对每一分片逐行读取基因的acgt字符信息、n字符信息、特殊字符信息和换行符信息,记录每一行的长度;
对于n字符信息,用<相对行首的偏移位置,出现长度>的二元组形式表示;特殊字符以<相对行首的偏移位置,特殊字符>的二元组表示;行尾的换行符使用整数表示其相对行首的偏移位置;
acgt字符信息按照k-mer方式进行哈希编码,在内存中建立哈希索引数组和哈希冲突数组;根据步骤s200中的哈希算法,计算该acgt信息在哈希索引数组与哈希冲突数组中对应的哈希值;再遍历参考序列,找到该哈希值对应的k-mer元素并记录其在参考序列中的位置号,以下简称参考位置号,然后将参考序列与待压缩序列的位置指针同时后移,连续比较直到acgt信息不再匹配为止;
设置片段的匹配度门限,对低于该值或者违背规则的片段,以<哈希值,相对偏移量,字符串>三元组形式另外cache序列化到内存中,其中的相对偏移量表示该片段相对前一匹配片段的偏移量,字符串即该片段的文字表示;
对高于该值而且符合规则的片段,则生成一个格式为<参考位置号,匹配位置,匹配长度>的三元组,其中的参考位置号表示该片段在参考序列中对应的位置号,匹配位置表示该片段在待压缩fastq文件中的位置号,匹配长度即该片段的长度;一个待压缩fastq文件的所有碱基序列信息被编程语言表示为一个javaarraylistrdd返回,使用cache算子的memory_ser方式缓存这些中间结果;
s302、三元组哈希编码
使用mappartitionwithindex算法获取所有分片的序号,再用filter算子过滤出需要参与二次匹配的第一类参考文件并记录其序号;然后,对s301筛选出的一次匹配三元组结果进行哈希编码;
s303、三个数组发布
将s302得到的三元组哈希编码以及第一类参考文件序号信息通过first算子拉取到driver本地,对其封装成广播变量,然后发布到每个进行二次匹配的计算节点;
s304、二次匹配
在计算节点侧,根据得到的三元组哈希编码以及第一类参考文件序号信息,使用mappartition算子对每一个三元组运用第一哈希算法,依次与第一类参考文件进行匹配,直到选取出最长匹配的元组,记录其出现的位置、长度以及对应的参考序列文件号;将所有匹配后的信息序列化为字符串,并输出至hdfs;
s400、为读取到的质量分数序列创建spark任务,此任务的输入信息为以string表示的质量分数序列,输出信息为字节块,然后输出到hdfs,具体步骤为:
s401、聚类门限计算
使用mappartition算子,从质量分数序列文件中读取出十万行数据,对其中的每一行记录,使用k-mer读取方式对每一个k-mer计算其质量估算总值,其中:所述质量估算总值为将行内每个字符与7按位或,然后进行移位计算;如果出现两行的质量估算值相同,则判定为它们的k-mer质量相同,统计所有符合此条件的k-mer的出现频次,并按出现频次从大到小排序,选取出现频次前70%的k-mer,找到频次最高的k-mer的质量估算总值乘以一个划分类别的系数,定义为第一聚类门限,以作为聚类划分依据;
s402、频次极值和字符寻找
对质量分数序列,计算字符ascii码分布频次的极值,将极值对应的字符记为第一字符,以在映射阶段作编码对照;
s403、字节块分类
以行为单位,从质量分数序列的每行中按k-mer计算每个k-mer的质量估算值,将每行计算的质量估算总值与第一聚类门限作比较,低于则进入缓冲类别1,高于则进入缓冲类别2;这两种缓冲类别将以字节块的形式存储;使用mappartitionwithindex获取文件号,并且使用reducebykey算子,利用shuffle将具有相同缓冲类别与相同文件号的块数据划分到一个分区,以提升并行度;
s404、字符块映射
使用mappartition进行字节的映射,将连续的字节或值较大的字符块映射成较小的字节块;对于连续的或者与第一字符相近范围内的字节块,一并映射成更小的字节块;处理完成后,上述字节块将输出到hdfs。
s500、driver本地程序从hdfs拉取压缩后的碱基序列与标识符序列、质量分数序列数据到本地,使用bsc压缩组件作最后的压缩运算,从而输出最终压缩结果。
2.根据权利要求1所述的批量分布式压缩方法,其特征在于,步骤s301输出的序列化字符串支持使用hadoop指令或者访问hdfs可视化网页端下载访问。
3.根据权利要求1或2所述的批量分布式压缩方法,其特征在于,spark使用yarn任务参数与配置调优来优化任务中每个计算槽的性能。