分享

Spark 高级分析:第十章第1节 解耦存储与建模

feilong 2018-12-14 07:49:19 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 4274
问题导读

1.
本章主要目的有哪些
2.
什么是Avro
3.
现有的RPC框架有哪些?有何异同?



关注最新经典文章,欢迎关注公众号



Spark 高级分析:第九章第10,11节 返回值分布可视化和结果评估
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26457


第十章基因组学数据与BDG项目分析
- George M. Church
下一代DNA测序技术(NGS)的出现正在迅速地将生命科学转化为数据驱动的领域。然而,最大限度地利用这些数据是与建立在分布式计算(例如,DRMAA或MPI)中难以使用的低级原语和半结构化的基于文本的文件格式丛林之上的传统计算生态系统对峙的。

本章将服务于三个主要目的。首先,我们向Spark用户介绍一组新的Hadoop友好的序列化和文件格式(Avro和Parquet),它们极大地简化了数据管理中的许多问题。我们广泛地促进使用这些序列化技术来实现紧凑的二进制表示、面向服务的体系结构和语言交叉兼容性。第二,我们展示了经验丰富的生物信息学家如何利用Spark执行典型的基因组学任务。具体地说,我们将使用Spark来操纵大量的基因组数据以处理和过滤数据,建立转录因子结合位点预测模型,并针对1000个基因组项目变体加入ENCODE基因组注释。最后,本章将作为ADAM项目的教程,该项目包括一组基因组特异性Avro模式、基于Spark的API和用于大规模基因组分析的命令行工具。在其他应用程序中,ADAM提供了本地分布式实现,使用Hadoop和SCAK的GATK最佳实践。

本章的基因组学部分针对熟悉典型问题的有经验的生物信息学家。然而,数据序列化部分应该对处理大量数据的任何人都有用。

第1节解耦存储与建模
生物信息学家花费了大量的时间担心文件格式。.fasta, .fastq, .sam, .bam, .vcf, .gvcf, .bcf, .bed, .gff, .gtf, .narrowPeak, .wig, .bigWig, .bigBed, .ped, .tped,等等,更不用说那些认为有必要自定义工具指定自定义格式的科学家了。除此之外,许多格式规范是不完整的/模糊的,并且指定ASCII编码数据。这尤其令人不安,因为所有这些文件格式本质上只存储一些常见的对象类型:对齐的序列读取、所谓的基因型、序列特征、表型。像biopython这样的库很流行,因为它们是chock-full-o'解析器(例如,Bio.SeqIO),它们尝试将所有文件格式读入到少量常见的内存模型(例如,Bio.Seq、Bio.Seq Record、Bio.SeqFeature)。

我们可以通过使用Apache Avro等系列化框架来解决所有这些问题。关键在于Avro将数据模型(即显式模式)与底层存储文件格式以及语言在内存中的表示分离。Avro指定了某种类型的数据应该如何在进程之间进行通信,无论是在互联网上运行的进程之间,还是在试图将数据写入特定文件格式的进程之间。例如,使用AVRO的Java程序可以将数据写入与Avro的数据模型完全兼容的多个底层文件格式。这允许每个进程停止担心与多种文件格式的兼容性:进程只需要知道如何读取Avro,文件系统需要知道如何提供Avro。

让我们以序列特征为例。我们首先使用AVRO接口定义语言(IDL)指定对象的所需模式:
[mw_shl_code=scala,true]enum Strand {
Forward,
Reverse,
Independent
}
record SequenceFeature {
string featureId;
string featureType;
string chromosome;
long startCoord;
long endCoord;
Strand strand;
double value;
map<string> attributes;
}[/mw_shl_code]
这种数据类型可以用来编码,例如,保守水平、启动子或核糖体结合位点的存在、转录因子结合位点等。一种考虑它的方法是JSON的二进制版本,但更受限制和更高性能。给定一个特定的数据模式,Avro规格确定精确的二进制编码的对象,所以它可以很容易地进程间交互(即使是用不同的编程语言编写的进程),无论程序是在网络上,或存储在磁盘。AVRO项目包括用于处理多种语言的AVRO编码数据的模块,包括Java、C/C++、Python和Perl;之后,该语言可以自由地将对象存储在存储器中,无论哪种方式被认为是最有利的。数据从存储格式模型的分离提供了另一种水平的灵活性/抽象;Avro数据可以存储序列化的二进制对象(Avro文件的容器),或在一个快速查询的柱状的文件格式(Parquet文件),或作为最大的灵活性(最小的效率),文本的JSON数据。最后,Avro支持架构的进化性,允许用户添加新的字段就成为必要,而优雅地处理所有软件架构的新/旧版本。

总体而言,Avro是一个高效的二进制编码,可以轻松指定数据模式的演化过程,从许多编程语言相同的数据,并使用多种格式存储数据。决定使用Avro模式可以让你与更多的自定义数据格式永远工作存储你的数据,同时增加你的计算性能。

串行化/ RPC框架
现存在大量的序列化框架。大数据社区中最常用的框架是Apache AVro、ApacheThrift和谷歌的Protocol Buffer。在核心上,它们都提供了用于指定对象/消息类型的模式的接口定义语言,并且都编译成各种编程语言。在Protocol Buffer支持的IDL之上,Thrift还添加了指定RPC的方法。最后,在IDL和RPC之上,Avro添加了用于在磁盘上存储数据的文件格式规范。很难概括哪个框架在什么情况下是适当的,因为它们都支持不同的语言,并且对于不同的语言具有不同的性能特征。

特别SequenceFeature模型是对实际数据有点简单化,但大数据的基因组(BDG)项目已定义的Avro模式代表以下对象:
  • 阅读的对齐记录
  • 在特定位置进行基础观测
  • 已知基因组变异和元数据的变体
  • 基因型在特定基因座上的基因型
  • 序列特征的特征(基因组片段的注释)
  • 其他

实际的模式可以在BDG格式Github repo中找到。全球基因组学和健康联盟也开始发展他们自己的AVRO模式。希望这不会变成它自己的http://xkcd.com/927/情况,其中存在大量竞争的Avro模式。尽管如此,AVRO提供了许多性能和数据建模的好处超过定制ASCII的现状。在本章的其余部分,我们将使用一些BDG模式来完成一些典型的基因组学任务。



已有(2)人评论

跳转到指定楼层
jiangzi 发表于 2018-12-14 14:19:36
全球基因组学和健康联盟也开始发展他们自己的AVRO模式。
回复

使用道具 举报

美丽天空 发表于 2018-12-17 23:03:27
看起来很厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条