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