关于华大基因
华大基因是中国最领先的基因科技公司,华大基因为消除人类病痛、经济危机、国家灾难、濒危动物保护、缩小贫富差距等方面提供分子遗传层面的技术支持。目前,世界上只有两个国家的三个公司可以生产、量产临床级别的基因测序仪,华大基因是中国的唯一一家。我们在基因的产权研发方面从1999年开始做了很多的工作。在2014年,我们与阿里云有了初步的接触,在2015年上线了我国第一个基因云计算平台。
华大基因股份公司总监金鑫介绍了华大基因,并浅谈了与阿里云的情缘,包括Maxcompute等方面应用案例。2016 杭州云栖大会首日,来自华大基因的基因组学数据专家黄树嘉在大数据专场分享了《基于数加 MaxCompute 的极速全基因组数据分析》
挑战
我们与阿里云合作是因为我们看到基因技术从过去的只在实验室中逐渐进入到广大群众的生活场景当中,不管是在医学健康方面、生殖健康方面、肿瘤防治方面、病原感染方面还是农业育种,以及与每个人息息相关的健康管理,基因技术已经取得越来越多的应用场景,在国产基因测序仪的助力之下,基因数据产生的体量也越来越庞大,远远的超出了原有的计算能力所能支持的范围。
遗传信息是生物体,包括人类的根本组成部分,由一系列DNA碱基对组成的字符串储存在我们的染色体中。具体来说,人类有23对染色体,总共包含约30亿对这样的碱基。这个庞大的数字不仅令解析工作复杂,成本高昂,更无法接受的问题是分析时间过长。 目前测序仪每一次测序的数据产量是 1.5TB,数十亿的记录数(大约为 150 人的数据量)。用传统的 HPC 集群进行分析的话,基本需要3天的时间来分析一个人的数据,而单个节点的话则需要 5.8 天的时间。由此可以看出,数据解读的效率远远跟不上数据的产出速度。
基于 MaxCompute 的方案
如何及时把这么多的数据解析出来,是当前的最大挑战。我们的解决方案主要基于maxcompute的两个能力:
a)稳定的分布式执行能力 b)海量数据极速查询能力。
利用MaxCompute的分布式能力
华大重新构建实现了基因的处理分析的流程:1) 对每个样本计算 gvcf 2) 合并所有 gvcf 到一张表 3) 群体 call variant 得到 vcf 表 4) 合并 vcf、
1)对每个样本 单独计算 gvcf: 主要功能是基于maxcompute分布式能力配合bwa完成分片数据的位点比对,并根据位点数据 shuffle 给对应的 reducer,并处理得到最终gcvf.
2)合并所有 gVCF 到一张表: 在这一步,通过maxcompute sql union将来自不同样本的大量基因组VCF(gVCF)文件合并到一张表中。gVCF文件包含了样本的变异信息以及参考基因组序列与样本序列完全匹配的非变异区域。合并不同样本的gVCF文件有助于统一进行后续分析步骤,实现高效的多样本变异检测。
3)群体变异检测得到VCF表: 使用上一步得到的合并表,通过maxcompute mapper结合gatk genotype分析所有样本,确定哪些位置在群体中变异,并生成一个单一的VCF文件。这个VCF文件包含了整个群体中所有样本的变异情况,这些变异包括SNPs、Indels等。该步骤不仅检测到个别样本的变异,还可以发现那些在群体中共享的变异。
4)合并VCF: 再次通过maxcompute sql union将多阶段变异检测或使用不同策略处理的不同的样本组产生的多个VCF文件合并成一个,以完成关于整个群体变异的统一视图。这个过程会使用maxcompute的reduce结合GATK 的 CombineVariants来merge VCF
5)后续要做的过滤分析:合并VCF文件后,通常需要对数据进行过滤、注释、分析。以及最后对变异数据进行生物学解读,这涉及了解变异是如何影响个体的表型、如对特定疾病的易感性、药物反应性等。
利用MaxCompute的海量查询能力
在生物信息学和计算生物学领域,海量数据的查询分析比对是个常见挑战,尤其是在基因组测序、蛋白质组学和其他高通量技术中。如1)识别个体或群体中的基因组变异至关重要,这涉及在海量基因数据中,聚类对比找出某几个字段突变的记录 2)借助于公共数据库(如NCBI的dbSNP)查询特定遗传标记的基因信息,以探究其与疾病或表型的相关性,这类似于在大数据量的宽表中,高效查询出指定几列为特定值的记录。
故基因数据的解析时间和成本,在很大程度上和基于海量数据的对比查询性能有关。
但在传统HPC或hadoop-hive集群里,查询一个目标约每天产生500亿条的表,压缩后逻辑大小在4.7T 左右。 那么3个月的数据则大概在432T,按256M一个split算, 查询约要169万的slot实例,一个500台的集群约提供5万slot,则满负荷需要跑33轮。占用了大量计算资源和时间。
MaxCompute提供了,数据基于某些列hashcluster聚合或者zorder聚合能力,再按需计算出每个物理文件指定列的BloomFilter作为海量数据的多列索引文件(BloomFilter文件大小相对于原数据文件大小,几乎可以忽略不计,所以遍历查询BloomFilter非常快)。 相当于数据基于某些列的hashcluster或zorder聚合后,不仅能快速查询指定列(hash,zorder聚合列),还能得到指定bloomfilter的列查询性能收益。 尤其是hash或zorder列 和bloomfilter列有很强的业务相关性时:
如指定user表的userid,作为hashcluster聚合,再指定user的电话号,和 门牌地址码(以上数据均为测试模拟数据) 作为BloomFilter建。 在500亿级别的数据中,指定user 的电话号,或者 按地址查询user,都能秒级返回结果。 因为通过userid hash聚合已经将user按相同userid打散存放在对应hash分桶的物理文件中。
此时通过电话号查询,电话号和user基本是N对1关系(通常N比较小,一个人拥有2,3个电话号),通过电话号的bloomfilter文件过滤出来的真实表物理文件也只有1个(对应userid所在的hash分桶的文件),故查询非常快。
此时通过门牌地址查询,门牌地址和user基本是1对N(且通常N<10,一个地址被几个家庭成员所共享),所以maxcompute最多会启动N个slot去查询,对于maxcompute这样的分布式系统,并发查10个文件是非常快,且占用资源量非常低的。
同样场景如果不做hash聚合或者bloomfilter, 会有两个大劣势:
1)查询电话号码或地址,要去500亿记录的每个物理文件中查询,据上文陈述,这里需要启动169万个slot。相比上面例子的1个 和 N个。差了很多个数据量级
2)如果只做hash聚合不做bloomfilter,那除hash列其他列无查询收益。依然会启动169万个slot。
测试: 模拟单分区60E条 ,针对local_num,id_card, add_num 3列的组合查询 ,每条数据15列包含前3列,大小在0.4k左右,总大小3T。
local号码(电话)、id_card(userid) 组合成zorder聚合 ; local_num(电话),id_card(userid), add_num(地址)3列分别都设置成BloomFilter
测试如下查询query(测试数据均为模拟数据)
Q1: select * from test_final where local_num='13000002444’;
Q2: select * from test_final where add_num='13000002915’;
Q3: select * from test_final where id_card='130000024443141592’;
Q4: select * from test_final where local_num='13000002444' and add_num='13000002915’;
Q5: select * from test_final where local_num='13000002444' and add_num='13000002915' and id_card='130000024443141592';
能看到其查询性能差异显著甚至是2个数量级的
客户收益
每个人的基因数据为暂读取100G,传统计算方式处理需要三到五天,使用Maxcompute稳定的分布式和海量查询加速能力,可以提到到一小时内完成甚至多人的基因分析,大大加速了数据吞吐速度和交付速度。另外,在对百万人的基因数据进行遗传结构分析时,需要把每一个人与剩余的所有人进行遗传距离计算,对比,这个计算量是巨大的,计算复杂度已经远远超出了传统计算条件下硬件设备所能承受的能力范围,通过使用Maxcompute,我们已经在这方面取得了技术突破,其中,我们在几小时内就可以把一个人与十万人中所有遗传距离进行计算对比,计算成本大幅降低至1000美金以内,这样的例子我们还在不断的开发中,相信Maxcompute也会给我们带来更多的惊喜。
鸣谢: 最后感谢项目负责人,Maxcompute研发专家陆东,海虾 提供的材料和项目经验分享。