天天看點

《Spark核心技術與進階應用》——1.2節Spark的重要擴充

本節書摘來自華章社群《spark核心技術與進階應用》一書中的第1章,第1.2節spark的重要擴充,作者于俊 向海 代其鋒 馬海平,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

1.2 spark的重要擴充

大家知道,在hadoop中完成即席查詢(ad-hoc queries)、批處理(batch processing),流式處理(stream processing),需要建構不同的團隊,每個團隊需要不同的技術和經驗,很難做到共享。而spark實作了平台融合,一個基礎平台解決所有的問題,一個團隊擁有相同的技術和經驗完成所有的任務。

基于spark的基礎平台擴充了5個主要的spark庫,包括支援結構化資料的spark sql、處理實時資料的spark streaming、用于機器學習的mllib、用于圖計算的graphx、用于統計分析的sparkr,各種程式庫與spark核心api高度整合在一起,并在持續不斷改進。

1.2.1 spark sql和dataframe

spark sql是spark的一個處理結構化資料的子產品,提供一個dataframe程式設計抽象。它可以看作是一個分布式sql查詢引擎,主要由catalyst優化、spark sql核心、hive支援三部分組成。

相對于傳統的mapreduce api,spark的rdd api有了數量級的飛躍,從spark sql 1.3.0開始,在原有schemardd的基礎上提供了與r風格類似的dataframe api。

dataframe是以指定列(named columns)組織的分布式資料集合,在spark sql中,相當于關系資料庫的一個表,或r/python的一個資料架構,但背景更加優化。

dataframes支援多種資料源建構,包括:結構化資料檔案(parquet、json)加載、hive表讀取、外部資料庫讀取、現有rdd轉化,以及sqlcontext運作sql查詢結果建立dataframe,如圖1-4所示。

《Spark核心技術與進階應用》——1.2節Spark的重要擴充

新的dataframe api一方面大幅度降低了開發者學習門檻,同時支援scala、java、python和r語言,且支援通過spark shell、pyspark shell和sparkr shell送出任務。由于來源于schemardd,dataframe天然适用于分布式大資料場景。

關于spark sql更具體的内容和案例會在後面第6章詳細介紹。

1.2.2 spark streaming

spark streaming屬于核心spark api的擴充,它支援高吞吐量和容錯的實時流資料處理,它可以接受來自kafka、flume、twitter、zeromq或tcp socket的資料源,使用複雜的算法表達和進階功能來進行處理,如map、reduce、join、window等,處理的結果資料能夠存入檔案系統、資料庫。還可以直接使用内置的機器學習算法、圖形處理算法來處理資料,資料輸入/輸出示意圖如圖1-5所示。

《Spark核心技術與進階應用》——1.2節Spark的重要擴充

spark streaming提供一種名為離散流(dstream)的進階抽象連續資料流。dstream直接支援kafka、flume的資料源建立,或者通過進階操作其他dstream建立,一個dstream是一個序列化的rdd。

關于spark streaming更具體的内容和案例會在第7章詳細介紹。

1.2.3 spark mllib和ml

mllib是spark對常用的機器學習算法的實作庫,同時包括相關的測試和資料生成器。mllib目前支援4種常見的機器學習問題:二進制分類、回歸、聚類和協同過濾,以及一個底層的梯度下降優化基礎算法。

mllib基于rdd,天生就可以與spark sql、graphx、spark streaming無縫內建,mllib是mlbase的一部分,mlbase通過邊界定義,力圖将mlbase打造成一個機器學習平台,讓機器學習開發的門檻更低,讓一些并不了解機器學習的使用者也能友善地使用mlbase這個工具來處理自己的資料。

mllib支援将本地向量和矩陣存儲在單個機器中,也包括有一個或更多的rdd支援的分布式矩陣。在目前的實作中,本地向量和矩陣都是為公共接口服務的簡單資料模式,mllib使用了線性代數包breeze。在監督學習中使用到的樣本在mllib中成為标記點。

spark mllib架構由底層基礎、算法庫和應用程式三部分構成。底層基礎包括spark的運作庫、進行線性代數相關技術的矩陣庫和向量庫。算法庫包括spark mllib實作的具體機器學習算法,以及為這些算法提供的各類評估方法;主要實作算法包括建立在廣義線性回歸模型的分類和回歸,以及協同過濾、聚類和決策樹。在最新的spark 1.5.0版本中還新增了基于前饋神經網絡的分類器算法multilayerperceptronclassif?ier(mlpc),頻繁項挖掘算法pref?ixspan、associationrules,實作kolmogorov-smirnov檢驗等等算法,随着版本的演進,算法庫也會越來越強大。應用程式包括測試資料的生成以及外部資料的加載等功能。

spark的ml庫基于dataframe提供高性能api,幫助使用者建立和優化實用的機器學習流水線(pipeline),包括特征轉換獨有的pipelines api。相比較mllib,變化主要展現在:

1)從機器學習的library開始轉向建構一個機器學習工作流的系統,ml把整個機器學習的過程抽象成pipeline,一個pipeline是由多個stage組成,每個stage是transformer或者estimator。

2)ml架構下所有的資料源都是基于dataframe,所有模型也盡量都基于spark的資料類型表示,ml的api操作也從rdd向dataframe全面轉變。

關于mllib和ml庫更具體的内容和案例會在第8章詳細介紹。

1.2.4 graphx

從社交網絡到語言模組化,圖資料規模和重要性的不斷增長,推動了數不清的新型并行圖系統(例如,giraph和graphlab)的發展。通過限制可以表達的計算類型和引入新的技術來分割和分發圖,這些系統可以以高于普通的資料并行系統幾個數量級的速度執行複雜的圖算法,如圖1-7所示。

《Spark核心技術與進階應用》——1.2節Spark的重要擴充

graphx是用于圖和并行圖計算的新spark api。從上層來看,graphx通過引入彈性分布式屬性圖(resilient distributed property graph)擴充了spark rdd。這種圖是一種僞圖,圖中的每個邊和節點都有對應的屬性。

為了支援圖計算,graphx給出了一系列基礎的操作(例如,subgraph、joinvertices、和mapreducetriplets)以及基于pregel api的優化變體。除此之外,graphx還包含了一個不斷擴充的圖算法和建構器集合,以便簡化圖分析的任務。

關于graphx更具體的内容和案例會在第9章中詳細介紹。

1.2.5 sparkr

sparkr是amplab釋出的一個r開發包,為apache spark提供了輕量的前端。sparkr提供了spark中彈性分布式資料集(rdd)的api,使用者可以在叢集上通過r shell互動性地運作job。例如,我們可以在hdfs上讀取或寫入檔案,也可以使用lapply函數進行方法調用,定義對應每一個rdd元素的運算。

spark具有快速(fast)、可擴充(scalable)、互動(interactive)的特點,r具有統計(statistics)、繪圖(plots)的優勢,r和spark的有效結合,解決了r語言中無法級聯擴充的難題,也極大地豐富了spark在機器學習方面能夠使用的lib庫。

除了常見的rdd函數式算子reduce、reducebykey、groupbykey和collect之外,sparkr也支援利用lapplywithpartition對每個rdd的分區進行操作。sparkr也支援常見的閉包(closure)功能:使用者定義的函數中所引用到的變量會自動被發送到叢集中的其他的機器上。

sparkr的工作原理如圖1-8所示,首先加載r方法包和rjava包,然後通過sparkr初始化sparkcontext。

《Spark核心技術與進階應用》——1.2節Spark的重要擴充

關于sparkr處理資料挖掘更具體的内容和案例會在第10章詳細介紹。

繼續閱讀