溫向慧 西北師范大學計算機科學與工程學院
大數(shù)據(jù)處理平臺Spark研究
溫向慧 西北師范大學計算機科學與工程學院
隨著大數(shù)據(jù)時代的到來,傳統(tǒng)的單機模式已經(jīng)不能滿足大規(guī)模數(shù)據(jù)分析處理的需求。Spark是專門針對海量數(shù)據(jù)設計的通用并行計算引擎。Spark啟用了彈性分布式數(shù)據(jù)集RDD,能夠在內(nèi)存中進行多次迭代計算,其高端的設計理念,為大型應用程序的構建奠定了基礎。
海量數(shù)據(jù) Spark RDD 迭代計算
Apache Spark是由加州伯克利分校AMP實驗室開發(fā)的,用scala語言實現(xiàn)的一種通用計算框架,具有運行速度快、使用方便、適應性好、易于部署等特點。Spark實現(xiàn)了一個集群的分布式內(nèi)存抽象(RDD),RDD(Resilient Distributed Dataset)是一個只讀的記錄分區(qū)的集合,運行于內(nèi)存中。Spark使用有向無環(huán)圖(DAG)設計,與Hadoop相比,其操作簡單,使用簡潔的代碼就能處理大規(guī)模數(shù)據(jù)問題。它可以訪問不同的數(shù)據(jù)源,包括HDFS,Cassandra,HBase和S3。Spark可以使用其獨立集群模式,也可以運行在EC2,Hadoop YARN或Apache Mesos上。
Spark生態(tài)系統(tǒng)如下圖所示,包含多個組件:Spark SQL、Spark Streaming、MLlib Graph X等。SparkSQL用于查詢Spark程序中的結構化數(shù)據(jù),Spark Streaming用于實時流處理,MLlib用于機器學習中,Graph X用于圖計算,它們能夠使用RDD無縫的集成,形成一站式的處理平臺,使應用程序的開發(fā)變得簡單。
Spark生態(tài)系統(tǒng)
Spark SQL是Spark框架的一部分,用于查詢和分析結構化的海量數(shù)據(jù)。它提供了一個分布式的SQL查詢引擎DataFrames,是一種分布式數(shù)據(jù)集合,由“命名列”組織而成,相當于關系型數(shù)據(jù)庫中的數(shù)據(jù)表。DataFrames和SQL提供了訪問各種數(shù)據(jù)源的常用方法,這些數(shù)據(jù)源包括Hive,Avro,Parquet,ORC,JSON和JDBC。另外SQL接口還可以與不同數(shù)據(jù)源的數(shù)據(jù)交互。Spark SQL在使用時先將外部數(shù)據(jù)源轉化為DataFrames,再進行查詢和轉換,最后將處理結果存儲或展示,實用性較好。
SparkStreaming是一個高吞吐量、高容錯的實時流處理系統(tǒng)。它不是直接的流式處理,而是將數(shù)據(jù)流切分成短小的批處理作業(yè),例如以1秒為時間片切分,每個時間片數(shù)據(jù)都是一個RDD,可以使用RDD的轉換、行動操作來處理每個時間片數(shù)據(jù)。每個RDD都會產(chǎn)生一個Job處理,最后的結果也是返回多個時間片數(shù)據(jù)。SparkStreaming支持從多種數(shù)據(jù)源獲取數(shù)據(jù),包括Kafka、Kinesis、Twitter、TCP sockets、Flume以及ZeroMQ,從數(shù)據(jù)源獲取數(shù)據(jù)之后,可以用Map、Reduce、Join和Filter等高級操作處理大規(guī)模復雜數(shù)據(jù),最后將處理結果存儲或展示。由于Spark是短小的批處理方式,所以對一些實時性要求較高的應用來說不適合,比較適合實時處理與歷史處理相結合的應用場景。
MLlib是Apache Spark可擴展的機器學習庫,其中包含許多常用的機器學習算法、實用程序和工具類,機器學習算法有分類、聚類、回歸、推薦、決策樹、主題建模等,實用程序包括特征轉換、模型評估等,還有一些其他工具如:分布線性代數(shù)、統(tǒng)計。因為Spark的優(yōu)勢是迭代計算,所以對于一些多次迭代的機器學習算法,SparkMLlib的效果遠遠優(yōu)于MapReduce。同時,MLlib的出現(xiàn)讓機器學習的門檻降低,使一些對ML算法不了解的用戶也能方便的處理數(shù)據(jù)。
GraphX是基于Spark的圖計算框架,存儲單位是RDD,可以用于大規(guī)模的圖計算,如社交網(wǎng)絡關系等。GraphX主要描述的是有向圖,即包括頂點和邊兩種屬性的圖,它提供了三種視圖,分別是:頂點(Vertex)、邊(Edge)和邊三元組(EdgeTriplet),圖計算就是在以上三種視圖上進行的。GraphX實現(xiàn)了一些常用的圖算法模型,如相鄰頂點收集算法、PageRank算法、圖中三角形統(tǒng)計算法、pregel圖計算框架等等。在GraphX上實現(xiàn)的一系列經(jīng)典的圖算法使得用戶在Spark上編寫程序更加簡單。
在大數(shù)據(jù)環(huán)境下,傳統(tǒng)的單機模式已不能處理海量數(shù)據(jù)。Hadoop雖然能處理大規(guī)模數(shù)據(jù),但它更加擅長離線的批量數(shù)據(jù),且耗時長。Spark既能處理流式數(shù)據(jù)又能處理批量數(shù)據(jù),它使用RDD的內(nèi)存抽象,使得代碼的編寫變得簡潔,以其內(nèi)存計算的優(yōu)勢,大大加快了數(shù)據(jù)處理速度,擁有的各個組件具有各自的優(yōu)勢,各組件數(shù)據(jù)也能通過RDD交互,構成了一站式的大數(shù)據(jù)分析處理平臺。由此可看出,Spark擁有先進的設計理念,是大數(shù)據(jù)處理平臺的首選。