Spark大數據開發技術簡介
- 輕量級的內存集羣計算平臺
歷史沿革
- Apache Spark是一個圍繞速度、易用性和複雜分析構建的大數據處理框架
- 最初在2009年由加州大學伯克利分校的AMPLab開發,並於2010年成爲Apache的開源項目之一,與Hadoop和Storm等其他大數據和MapReduce技術相比,Spark有如下優勢:
- Spark提供了一個全面、統一的框架用於管理各種有着不同性質(文本數據、圖表數據等)的數據集和數據源(批量數據或實時的流數據)的大數據處理的需求
- 官方資料介紹Spark可以將Hadoop集羣中的應用在內存中的運行速度提升100倍,甚至能夠將應用在磁盤上的運行速度提升10倍
Spark的優點
傳統MapReduce的不足
- 在整個過程中,中間結果會藉助磁盤傳遞,因此大量的Map-Reduced作業都受限於IO。
對比
Spark | Hadoop | Storm | |
---|---|---|---|
處理模型 | Batch + Stream | Batch | Stream |
實時性 | 較快 | 慢 | 快 |
容錯性 | 好 | 一般 | 較好 |
實現語言 | Scala | Java | Java + Clojure |
存儲介質 | 內存 + 磁盤 | 磁盤 | 內存 |
生態環境 | 較好 | 好 | 較差 |
適用場景 | 機器學習 | 離線數據分析 | 實時消息流 |
Apache Spark堆棧中的不同組件
基本原理
-
Spark Core
包含Spark的基本功能;尤其是定義RDD的API、操作以及這兩者上的動作。其他Spark的庫都是構建在RDD和Spark Core之上的 -
Spark SQL
提供通過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進行交互的API。每個數據庫表被當做一個RDD,Spark SQL查詢被轉換爲Spark操作。 -
Spark Streaming
對實時數據流進行處理和控制。Spark Streaming允許程序能夠像普通RDD一樣處理實時數據 -
Mllib
一個常用機器學習算法庫,算法被實現爲對RDD的Spark操作。這個庫包含可擴展的學習算法,比如分類、迴歸等需要對大量數據集進行迭代的操作。 -
GraphX
控制圖、並行圖操作和計算的一組算法和工具的集合。GraphX擴展了RDD API,包含控制圖、創建子圖、訪問路徑上所有頂點的操作
架構組成
-
Cluster Manager
在standalone模式中即爲Master主節點,控制整個集羣,監控worker。在YARN模式中爲資源管理器 -
Worker節點
從節點,負責控制計算節點,啓動Executor或者Driver。
部署和體系結構
Spark運行模式
- 本地模式(Local Mode)
該模式被稱爲Local[N]模式,是用單機的多個線程來模擬Spark分佈式計算,直接運行在本地,便於調試,通常用來驗證開發出來的應用程序邏輯上有沒有問題。
例子:(在spark安裝目錄的examples\jars下運行)
spark-submit --class org.apache.spark.examples.SparkPi --master local spark-examples*.jar 10
- 獨立集羣運行模式(Standalone)
Standalone模式使用Spark自帶的資源調度框架
採用Master/Slaves的典型架構,選用ZooKeeper來實現Master的HA
當使用spark-submit工具提交Job或者在Eclipse、IDEA等開發平臺上使用: new SparkConf
.setManager (“spark://master:7077”) 方式運行Spark任務時,Driver是運行在本地Client端上的
框架結構如下:
- Spark on Yarn