溫向慧 西北師范大學計算機科學與工程學院
大數據處理平臺Spark研究
溫向慧 西北師范大學計算機科學與工程學院
隨著大數據時代的到來,傳統的單機模式已經不能滿足大規模數據分析處理的需求。Spark是專門針對海量數據設計的通用并行計算引擎。Spark啟用了彈性分布式數據集RDD,能夠在內存中進行多次迭代計算,其高端的設計理念,為大型應用程序的構建奠定了基礎。
海量數據 Spark RDD 迭代計算
Apache Spark是由加州伯克利分校AMP實驗室開發的,用scala語言實現的一種通用計算框架,具有運行速度快、使用方便、適應性好、易于部署等特點。Spark實現了一個集群的分布式內存抽象(RDD),RDD(Resilient Distributed Dataset)是一個只讀的記錄分區的集合,運行于內存中。Spark使用有向無環圖(DAG)設計,與Hadoop相比,其操作簡單,使用簡潔的代碼就能處理大規模數據問題。它可以訪問不同的數據源,包括HDFS,Cassandra,HBase和S3。Spark可以使用其獨立集群模式,也可以運行在EC2,Hadoop YARN或Apache Mesos上。
Spark生態系統如下圖所示,包含多個組件:Spark SQL、Spark Streaming、MLlib Graph X等。SparkSQL用于查詢Spark程序中的結構化數據,Spark Streaming用于實時流處理,MLlib用于機器學習中,Graph X用于圖計算,它們能夠使用RDD無縫的集成,形成一站式的處理平臺,使應用程序的開發變得簡單。

Spark生態系統
Spark SQL是Spark框架的一部分,用于查詢和分析結構化的海量數據。它提供了一個分布式的SQL查詢引擎DataFrames,是一種分布式數據集合,由“命名列”組織而成,相當于關系型數據庫中的數據表。DataFrames和SQL提供了訪問各種數據源的常用方法,這些數據源包括Hive,Avro,Parquet,ORC,JSON和JDBC。另外SQL接口還可以與不同數據源的數據交互。Spark SQL在使用時先將外部數據源轉化為DataFrames,再進行查詢和轉換,最后將處理結果存儲或展示,實用性較好。
SparkStreaming是一個高吞吐量、高容錯的實時流處理系統。它不是直接的流式處理,而是將數據流切分成短小的批處理作業,例如以1秒為時間片切分,每個時間片數據都是一個RDD,可以使用RDD的轉換、行動操作來處理每個時間片數據。每個RDD都會產生一個Job處理,最后的結果也是返回多個時間片數據。SparkStreaming支持從多種數據源獲取數據,包括Kafka、Kinesis、Twitter、TCP sockets、Flume以及ZeroMQ,從數據源獲取數據之后,可以用Map、Reduce、Join和Filter等高級操作處理大規模復雜數據,最后將處理結果存儲或展示。由于Spark是短小的批處理方式,所以對一些實時性要求較高的應用來說不適合,比較適合實時處理與歷史處理相結合的應用場景。
MLlib是Apache Spark可擴展的機器學習庫,其中包含許多常用的機器學習算法、實用程序和工具類,機器學習算法有分類、聚類、回歸、推薦、決策樹、主題建模等,實用程序包括特征轉換、模型評估等,還有一些其他工具如:分布線性代數、統計。因為Spark的優勢是迭代計算,所以對于一些多次迭代的機器學習算法,SparkMLlib的效果遠遠優于MapReduce。同時,MLlib的出現讓機器學習的門檻降低,使一些對ML算法不了解的用戶也能方便的處理數據。
GraphX是基于Spark的圖計算框架,存儲單位是RDD,可以用于大規模的圖計算,如社交網絡關系等。GraphX主要描述的是有向圖,即包括頂點和邊兩種屬性的圖,它提供了三種視圖,分別是:頂點(Vertex)、邊(Edge)和邊三元組(EdgeTriplet),圖計算就是在以上三種視圖上進行的。GraphX實現了一些常用的圖算法模型,如相鄰頂點收集算法、PageRank算法、圖中三角形統計算法、pregel圖計算框架等等。在GraphX上實現的一系列經典的圖算法使得用戶在Spark上編寫程序更加簡單。
在大數據環境下,傳統的單機模式已不能處理海量數據。Hadoop雖然能處理大規模數據,但它更加擅長離線的批量數據,且耗時長。Spark既能處理流式數據又能處理批量數據,它使用RDD的內存抽象,使得代碼的編寫變得簡潔,以其內存計算的優勢,大大加快了數據處理速度,擁有的各個組件具有各自的優勢,各組件數據也能通過RDD交互,構成了一站式的大數據分析處理平臺。由此可看出,Spark擁有先進的設計理念,是大數據處理平臺的首選。