大数据处理平台Spark及其生物医学应用
2015-05-26范炜玮赵东升
范炜玮+赵东升
摘要:随着生命科学和医疗信息化的快速发展,生物医学数据出现了爆炸式增长趋势,其处理面临数据量大、维度关系复杂和交互式响应要求高等问题。传统的数据库以及Hadoop框架在处理生物医学大数据方面都存在一些不足。Spark是一个新兴的基于内存计算的开源大数据平台,具有丰富的编程接口、通用的处理框架和多元化的运行模式。本文介绍了Spark的关键技术和特性,以及不同来源生物医学大数据特点和成功案例,表明Spark在生物医学大数据处理中的适用性和潜在优势。
关键词:大数据;Spark:医学研究:生物医学信息学
doi:10.3 969/j.issn.2095-5 707.2015.02.001
对生物医学数据的处理,最终目的是从中获取知识,为提高卫生服务效率、促进医学发展和卫生管理提供支持,使得“数据信息知识”的认知链更臻完善。随着生命组学、医学技术和医疗信息化的快速发展,生物医学数据出现了爆炸式增长趋势,其处理面临数据量大、维度关系复杂、计算强度高等问题。将大数据技术引入医学领域,可以及时充分地共享医疗信息、感知医疗资源,通过模型分析和数据挖掘,描述生命现象和医疗决策中规律并预测其发展趋势。例如,谷歌在2009年初通过用户在网上的搜索记录成功预测甲型HIN1流感的爆发,其“流感趋势系统”通过结合传统监测方法和大数据处理技术,可以预测美国未来1周的流感感染情况;美国的FlatironHealth公司,致力于通过收集和分析海量的临床数据进行癌症治疗的分析和预测,该公司已获得谷歌风投部门超过l亿美元的投资;美国政府于2012年3月发布了“大数据的研究和发展计划”,其中多个项目涉及医疗、公共卫生和生命组学研究。
Hadoop是Apache基金会的顶级开源项目,已成为目前最重要的大数据技术框架之一,其MapReduce计算模型和完善的生态系统大大简化了大数据处理系统开发和运维管理。Hadoop在生物医学大数据处理中得到成功应用,涵盖了生物信息学、智慧医疗、健康档案、流行病预警、传染病监测等多个方面阻。Explorys医疗数据公司基于Hadoop的云平台能够帮助医生提高聚合、分析、管理和获得辅助决策信息的能力。当前的Hadoop版本也存在一些不足。由于MapReduce在设计上追求简化的计算模型、大规模分布计算的容错性和可扩展性,因而存在较大的磁盘I/O开销以及冗余读写和编程不够灵活等问题,更适合大规模数据的批量或离线计算,不能充分满足数据挖掘和机器学习常用的迭代计算、图计算和低延迟的交互式查询计算等更复杂的计算需求。
Spark最初由伯克利大学AMPLab实验室于2009年提出,是一个通用大数据处理引擎,旨在快速、易用地处理复杂数据。Spark的出现弥补了Hadoop的不足,成为发展最快的大数据处理平台之一,已广泛应用于腾讯、雅虎和淘宝等一线互联网公司的报表和广告推荐等业务,在生物医学领域也出现了一些成功案例。
1 Spark关键技术与相关子项目
1.1
Spark特点和关键技术
Spark (http://spark. apache. org/)是Apache基金会开源项目,它充分整合利用了现有云计算和大数据技术,具有丰富的编程接口,支持在单机、HadoopYarn、Mesos (http://mesos.apache.org/)集群和亚马逊EC2云等多种平台上运行,能够访问HDFS文件系统和Hbase数据库等任意Hadoop支持的数据源,提供批处理、交互式、流处理等多种数据处理模式,为大数据应用提供一个统一的平台。据Apache官方测试,Spark运行逻辑回归算法的计算速度是Hadoop的10~100倍。如此之高的性能提升,得益于以下关键技术。
1.1.1 弹性分布式数据集(Resilient DistributedDatasets,RDD) RDD是Spark计算框架的核心技术。在Spark中,所有的数据都抽象成RDD。用户可将中间结果缓存在内存中,便于有效地被重用和进行并发操作,免去不必要的I/O开销。RDD只能通过两种方式创建,一是读取本地或Hadoop分布式文件系统( HDFS)上的文件,二是由其他RDD转换而来,具有只读(一组RDD可以通过数据集操作生成另外一组RDD,但是不能直接被改写)、弹性扩展和容错等特性。
1.1.2 共享变量 与MapReduce不同的是,Spark提供广播( Broadcast)和累加器(Accumulators)两种受限的共享变量,可以像分布式内存系统一样提供全局地址空间接口,提高了数据的共享性。
1.1.3 容错机制 分布式共享内存系统一般通过检查点( checkpoint)和回滚(rollback)方式容错,而RDD通过称为“世系关系”(Lineage)的机制提供高效的容错,该机制使RDD包含其演化过程中一系列的依赖关系,能够自动从节点失败中重构丢失的RDD。
1.1.4 支持有向无环图(Directed Acyclic Graph,DAG)编程框架 由于MapReduce设计上的约束,Hadoop缺少对迭代计算和DAG运算的支持。Spark具有丰富全面的数据集运算操作,除了Map和Reduce操作,还增加了过滤、抽样、分组、排序、并集、连接、分割、计数、收集、查找等80多种算子,并合理地划分为Transformation(变换)和Ac tion(动作)两大类。利用这些算子,能够方便地建立起RDD的DAG计算模型,将所有操作优化成DAG图,提高计算效率和编程灵活性。
1.2
Spark相关子项目
Spark在机器学习、交互式查询、流计算和图计算等方面都有相关子项目,使用同一个引擎便能高效地满足数据统计查询、机器学习和流数据处理的应用需求。这些子项目形成了Spark核心计算框架上的工具(库),以便于开发无缝集成的应用程序。
1.2.1 流计算框架( Spark Streaming) 流计算框架( http://spark.apache.org/streaming/)将数据流根据小时间片分解成一系列短小的批处理作业,根据业务需求对中间结果叠加计算或者存储到外部设备,具有高吞吐量和高效的容错处理能力。
1.2.2 可扩展机器学习库(MLBase/MLlib) Mllib(http://spark.apache.org/mllib/)包括一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维、特征变换及底层优化。MLbase通过边界定义,力图将MLbase打造成一个机器学习平台,让一些并不深入了解机器学习的用户也能方便地使用MLbase来处理自己的数据,其机器学习优化器能够根据用户输入场景选择最适合的机器学习算法和相关参数。
1.2.3 即席数据查询引擎( Spark SQL) 从ApacheHive表、parquet和JSON格式的文件中装载和查询数据,通过Python、Scala和Java语言编程接口将结构化数据作为RDD进行查询,实现SQL查询(http://spark. apache.org/sql/)和Spark程序的无缝集成,使运行带有SQL查询的复杂分析算法更容易。同时,可以不加修改地运行Apache Hive数据仓库查询,支持传统JDBC/ODBC连接。
1.2.4 并行图计算框架(GraphX) GraphX(http://spark.apache.org/graphx/)基于Spark的图处理和图并行计算API,可将一组数据同时看作集合( Collection)和图(Graph)两种视图,每种视图都有自己独特的操作符,利用基于RDD的图操作保证了操作灵活性和执行效率。
1.2.5 采样近似计算查询引擎(BlinkDB) BlinkDB( http://blinkdb.org/)是一个在海量数据上运行交互式查询的大规模并行查询引擎。它通过维护一组多维样本的自适应优化框架和动态样本选择策略,允许用户权衡数据精度来提升查询响应时间性能,而数据会被限制在误差范围以内。在2012年超大规模数据库(Very Large Database,VLDB)会议上的一个演示中,BlinkDB对17 TB数据的一组查询不到2s即可完成,比Hive快200倍,而错误率在2%~10%之间。
1.2.6 分布式内存文件系统(Tachyon) Tachyon( http://tachyon-project.org/)是一个高容错的分布式文件系统,允许文件以内存的速度在计算机集群中进行可靠的读写和共享,以达到提高效率的目的。项目开发者提出了一种在存储层利用“世系信息”( lineage)的容错机制,克服了传统写操作中数据同步的瓶颈,在测试中比HDFS快110倍。
2 Spark在生物医学大数据中的应用
2.1 生物医学大数据来源及特点
当前的生物医学大数据主要包括以下5大类,以高通量测序为代表的生命组学数据,以靶向药物研发为代表的药物研究实验产生的过程数据,以电子病历为代表的临床医疗服务数据,以居民电子健康档案为代表的个人健康监测与健康管理数据,以疾病监测和卫生监督为代表的公共卫生管理数据。这些数据与电子商务、社交媒体等互联网大数据相比,具有明显的不同。
互联网大数据的样本量至少在亿级,例如,淘宝2014年“双十一”促销活动1天就产生了2. 78亿笔交易。但其每个样本只是一次交易记录,结构化较强,样本的属性数量不会超过100个。同时,其数据分析主要是基于人群分类的广告推荐等,计算结果不需很精确。而医疗数据涉及到人的生命安全,对其进行分析研究,要求结果要很精确。
2.1.1 生命组学大数据 目前的单个研究样本量不大,但每个样本的数据量很大且复杂度高,是典型的“小样本大数据”。以“国际千人基因组计划”为例,总样本量只有1200人,但每个人的全基因组测序数据量很大,根据测序深度的不同可达数十甚至数百GB,因此该项目数据总量很大,经过整理后达50 TB;同时,数据结构复杂、维度很高,每个人的原始数据包含几千万短串序列,覆盖3万条基因的各种信息。因此,对其挖掘分析技术要求很高。
2.1.2 临床医疗大数据样本量较大,一家三甲医院每年可产生上百万条门诊纪录、几万份住院病历,单个样本的数据量比基因测序数据小,但描述样本的信息复杂、关联度强,因此是“大样本复杂关联数据”。以中医医院的临床信息系统为例,对每个就诊患者而言,既有门诊、住院、实验室检验等结构化和半结构化数据,也有病理分析、B超、PACS影像等大量非结构化数据;既有按照中医诊疗方法和术语规范产生的数据,也有按照现代西医标准产生的数据。此外,临床医疗数据天然地具有分布式特性,医疗机构信息系统内部及与其他卫生机构信息系统之间还存在数据标准不统一、融合性差等问题。因此,临床医疗大数据研究的重点在于如何标化整理这些数据、基于大数据的循证医学以及个性化医疗。
2.1.3 公共卫生大数据样本量很大,但每个样本的数据量较小,结构简单,需要融合不同类别的监测数据进行分析。以我国传染病监测报告为例,监测的样本量数以亿计,而每条记录仅为几十个特定的结构化字段。但为了监测和预测传染病暴发,需要同时对传染病报告数据、症状群监测数据、互联网搜索热词数据、环境气象数据进行融合分析,才能得出较准确的结果。因此,公共卫生大数据是融合大数据。
生物医学大数据的应用场景包括医学研究、个性化医疗、卫生统计决策、流行病预警和趋势预测等,其处理分析主要集中在清洗转换、特性抽取、语义建模、分类、聚类、序列分析、关联分析和回归分析等方面,对迭代计算、交互式查询和计算精度的要求都很高。
2.2 医学大数据Spark应用案例
随着Spark平台不断发展完善,一些医学研究机构开始使用Spark来提高数据处理能力。
美国的霍华德·休斯医学研究所使用250个节点的Spark集群进行大脑工作机制的研究,通过统计分析、回归分析、降维和聚类分析处理1TB/min的影像数据,可在几秒钟之内对6800万条时间序列进行处理,研究大脑不同区域在处理特定方向移动时的表现,生成大脑对方向响应的高清区域图。采用SparkStreaming实时监视神经元,以此来发现神经元之间的互相影响。该研究是Spark用于处理医学大数据的成功尝试,在2013年Spark峰会上引起了强烈反响和关注。他们的研究一直持续,并在2014年Spark峰会上开源了一个寻找模式复杂、高维神经反应的库“Thunder”,采用Spark Streaming和MLLib进行流处理和机器学习算法的整合,适用于多种神经数据的处理。
基因组学大数据分析在临床医疗尤其是个性化医疗中将发挥非常关键的作用。2014年Spark峰会上,加州大学伯克利分校的研究人员介绍了他们将Spark引入到在基因组学研究中的部分成果。短读基因序列校准器是数据处理中最昂贵的步骤之一,他们研发的基于Spark的核苷酸排列程序(ScalableNucleotide Alignment Program,SNAP)是迄今为止最准确和最快的校准器,使此类数据的处理速度比之前快3~10倍。ADAM是一个基于Spark的高性能DNA测序数据分析流程,能够执行复杂的计算密集型任务。使用一个82个节点的Spark集群,ADAM可以用比其他系统快50~110倍的速度来执行基因学中两个最关键的步骤。他们还将Spark处理平台用于识别个体和参考标准之间的差异,提出了一种具有合适评价指标的基因组学基准SMASH。
3 小结
Spark作为一个开源的大数据处理平台,以其内存计算、可伸缩及高效的容错特性,与分布式文件存储系统、分布式数据库结合使用,配合其丰富的生态系统,解决了数据增长和处理性能需求之间存在的瓶颈问题。Spark能够满足医学信息处理中以交互式查询和迭代计算为代表的统计分析、数据挖掘、图形计算等各种数据处理需求,可用于临床转化医学研究、基于海量原始数据的实时卫生统计和辅助决策、文献挖掘、流行病预警和预测,加速从发现知识到实际应用的过程,将在生物医学大数据处理分析中得到更广泛和深入的应用。