Spark1.0.0生態圈一覽
Spark生態圈,也就是BDAS(伯克利數據分析棧),是伯克利APMLab實驗室精心打造的,力圖在算法(Algorithms)、機器 (Machines)、人(People)之間通過大規模集成,來展現大數據應用的一個平臺,其核心引擎就是Spark,其計算基礎是彈性分布式數據集, 也就是RDD。通過Spark生態圈,AMPLab運用大數據、云計算、通信等各種資源,以及各種靈活的技術方案,對海量不透明的數據進行甄別并轉化為有 用的信息,以供人們更好的理解世界。Spark生態圈已經涉及到機器學習、數據挖掘、數據庫、信息檢索、自然語言處理和語音識別等多個領域。
隨著spark的日趨完善,spark以其優異的性能正逐漸成為下一個業界和學術界的開源大數據處理平臺。隨著spark1.0.0的發布和spark生 態圈的不斷擴大,可以預見在今后的一段時間內,Spark將越來越火熱。下面我們來看看最近的Spark1.0.0生態圈,也就是BDAS(伯克利數據分 析棧),對Spark生態圈做一簡單的介紹。
如下圖所示,Spark生態圈以Spark為核心引擎,以HDFS、S3、techyon為持久層讀寫原生數據,以Mesos、YARN和自身攜帶的 Standalone作為資源管理器調度job,來完成spark應用程序的計算;而這些spark應用程序可以來源于不同的組件,如Spark的批處理 應用、SparkStreaming的實時處理應用、Spark SQL的即席查詢、BlinkDB的權衡查詢、MLlib或MLbase的機器學習、GraphX的圖處理、來自SparkR的數學計算等等。更多的新信 息請參看伯克利APMLab實驗室的項目進展 https://amplab.cs.berkeley.edu/projects/ 或者 Spark峰會信息 http://spark-summit.org/ 。

Spark是一個快速的通用大規模數據處理系統,和Hadoop MapRedeuce相比:
- 更好的容錯性和內存計算
- 高速,在內存中運算100倍速度于MapReduce
- 易用,相同的應用程序代碼量要比MapReduce少2-5倍
- 提供了豐富的API
- 支持互動和迭代程序
Spark大數據平臺之所以能日漸紅火,得益于Spark內核架構的優秀:
- 提供了支持DAG圖的分布式并行計算框架,減少多次計算之間中間結果IO開銷
- 提供Cache機制來支持多次迭代計算或者數據共享,減少IO開銷
- RDD之間維護了血統關系,一旦RDD fail掉了,能通過父RDD自動重建,保證了容錯性
- 移動計算而非移動數據,RDD Partition可以就近讀取分布式文件系統中的數據塊到各個節點內存中進行計算
- 使用多線程池模型來減少task啟動開稍
- shuffle過程中避免不必要的sort操作
- 采用容錯的、高可伸縮性的akka作為通訊框架
- 。。。
B:SparkStreaming
SparkStreaming是一個對實時數據流進行高通量、容錯處理的流式處理系統,可以對多種數據源(如Kdfka、Flume、推ter、 Zero和TCP 套接字)進行類似map、reduce、join、window等復雜操作,并將結果保存到外部文件系統、數據庫或應用到實時儀表盤。
SparkStreaming流式處理系統特點有:
- 將流式計算分解成一系列短小的批處理作業
- 將失敗或者執行較慢的任務在其它節點上并行執行
- 較強的容錯能力(基于RDD繼承關系Lineage)
- 使用和RDD一樣的語義

Spark SQL是一個即席查詢系統,其前身是shark,不過代碼幾乎都重寫了,但利用了shark的最好部分內容。Spark SQL可以通過SQL表達式、HiveQL或者Scala DSL在Spark上執行查詢。目前Spark SQL還是一個alpha版本。
Spark SQL的特點:
- 引入了新的RDD類型SchemaRDD,可以象傳統數據庫定義表一樣來定義SchemaRDD,SchemaRDD由定義了列數據類型的行對象構成。
- SchemaRDD可以從RDD轉換過來,也可以從Parquet文件讀入,也可以使用HiveQL從Hive中獲取。
- 在應用程序中可以混合使用不同來源的數據,如可以將來自HiveQL的數據和來自SQL的數據進行join操作。
- 內嵌catalyst優化器對用戶查詢語句進行自動優化

BlinkDB是一個很有意思的交互式查詢系統,就像一個蹺蹺板,用戶需要在查詢精度和查詢時間上做一權衡;如果用戶想更快地獲取查詢結果,那么將犧牲查 詢結果的精度;同樣的,用戶如果想獲取更高精度的查詢結果,就需要犧牲查詢響應時間。用戶可以在查詢的時候定義一個失誤邊界。
BlinkDB的設計核心思想:
- 通過采樣,建立并維護一組多維度樣本
- 查詢進來時,選擇合適的樣本來運行查詢

E:MLbase/MLlib
MLlib是Spark實現一些常見的機器學習算法和實用程序,包括分類,回歸,聚類,協同過濾,降維,以及底層優化。
MLbase通過邊界定義,力圖將MLbase打造成一個機器學習平臺,讓機器學習的門檻更低,讓一些可能并不了解機器學習的用戶也能方便地使用MLbase這個工具來處理自己的數據,MLbase定義了四個邊界:
- ML Optimizer 優化器會選擇最適合的、已經實現好了的機器學習算法和相關參數
- MLI 是一個進行特征抽取和高級ML編程抽象的算法實現的API或平臺
- MLlib 基于Spark的底層分布式機器學習庫,可以不斷的擴充算法
- MLRuntime 基于Spark計算框架,將Spark的分布式計算應用到機器學習領域。

GraphX是基于Spark的圖處理和圖并行計算API。GraphX定義了一個新的概念:彈性分布式屬性圖,一個每個頂點和邊都帶有屬性的定向多重 圖;并引入了三種核心RDD:Vertices、Edges、Triplets;還開放了一組基本操作(如subgraph, joinVertices, and mapReduceTriplets),并且在不斷的擴展圖形算法和圖形構建工具來簡化圖分析工作。

SparkR是AMPLab發布的一個R開發包,使得R擺脫單機運行的命運,可以作為Spark的job運行在集群上,極大得擴展了R的數據處理能力。
Spark的幾個特性:
- 提供了Spark中彈性分布式數據集(RDD)的API,用戶可以在集群上通過R shell交互性的運行Spark job。
- 支持序化閉包功能,可以將用戶定義函數中所引用到的變量自動序化發送到集群中其他的機器上。
- SparkR還可以很容易地調用R開發包,只需要在集群上執行操作前用includePackage讀取R開發包就可以了,當然集群上要安裝R開發包。

2:生態圈的應用
Spark生態圈以Spark為核心、以RDD為基礎,打造了一個基于內存計算的大數據平臺,為人們提供了all-in-one的數據處理方案。人們可以 根據不同的場景使用spark生態圈的多個產品來解決應用,而不是使用多個隔離的系統來滿足場景需求。下面是幾個典型的例子:
A:場景1:歷史數據和實時數據分析查詢
通過spark進行歷史數據分析、spark Streaming進行實時數據分析,最后通過spark SQL或BlinkDB給用戶交互查詢。

B:場景2:欺詐檢測、異常行為的發現
通過spark進行歷史數據分析,用MLlib建立數據模型,對Spark Streaming實時數據進行評估,檢測并發現異常數據。

C:場景3:社交網絡洞察
通過Spark和GraphX計算社交關系,給出建議

來自:http://www.tuicool.com/articles/FVBJBjN