范煒瑋+趙東升
摘要:隨著生命科學和醫療信息化的快速發展,生物醫學數據出現了爆炸式增長趨勢,其處理面臨數據量大、維度關系復雜和交互式響應要求高等問題。傳統的數據庫以及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能夠滿足醫學信息處理中以交互式查詢和迭代計算為代表的統計分析、數據挖掘、圖形計算等各種數據處理需求,可用于臨床轉化醫學研究、基于海量原始數據的實時衛生統計和輔助決策、文獻挖掘、流行病預警和預測,加速從發現知識到實際應用的過程,將在生物醫學大數據處理分析中得到更廣泛和深入的應用。