Spark 系列(一)—— Spark 簡介
阿新 • • 發佈:2019-12-31
一、簡介
Spark 於 2009 年誕生於加州大學伯克利分校 AMPLab,2013 年被捐贈給 Apache 軟體基金會,2014 年 2 月成為 Apache 的頂級專案。相對於 MapReduce 的批處理計算,Spark 可以帶來上百倍的效能提升,因此它成為繼 MapReduce 之後,最為廣泛使用的分散式計算框架。
二、特點
Apache Spark 具有以下特點:
- 使用先進的 DAG 排程程式,查詢優化器和物理執行引擎,以實現效能上的保證;
- 多語言支援,目前支援的有 Java,Scala,Python 和 R;
- 提供了 80 多個高階 API,可以輕鬆地構建應用程式;
- 支援批處理,流處理和複雜的業務分析;
- 豐富的類庫支援:包括 SQL,MLlib,GraphX 和 Spark Streaming 等庫,並且可以將它們無縫地進行組合;
- 豐富的部署模式:支援本地模式和自帶的叢集模式,也支援在 Hadoop,Mesos,Kubernetes 上執行;
- 多資料來源支援:支援訪問 HDFS,Alluxio,Cassandra,HBase,Hive 以及數百個其他資料來源中的資料。
三、叢集架構
| Term(術語) | Meaning(含義) |
|---|---|
| Application | Spark 應用程式,由叢集上的一個 Driver 節點和多個 Executor 節點組成。 |
| Driver program | 主運用程式,該程式執行應用的 main() 方法並且建立 SparkContext |
| Cluster manager | 叢集資源管理器(例如,Standlone Manager,Mesos,YARN) |
| Worker node | 執行計算任務的工作節點 |
| Executor | 位於工作節點上的應用程式,負責執行計算任務並且將輸出資料儲存到記憶體或者磁碟中 |
| Task | 被髮送到 Executor 中的工作單元 |

執行過程:
- 使用者程式建立 SparkContext 後,它會連線到叢集資源管理器,叢集資源管理器會為使用者程式分配計算資源,並啟動 Executor;
- Dirver 將計算程式劃分為不同的執行階段和多個 Task,之後將 Task 傳送給 Executor;
- Executor 負責執行 Task,並將執行狀態彙報給 Driver,同時也會將當前節點資源的使用情況彙報給叢集資源管理器。
四、核心元件
Spark 基於 Spark Core 擴充套件了四個核心元件,分別用於滿足不同領域的計算需求。
3.1 Spark SQL
Spark SQL 主要用於結構化資料的處理。其具有以下特點:
- 能夠將 SQL 查詢與 Spark 程式無縫混合,允許您使用 SQL 或 DataFrame API 對結構化資料進行查詢;
- 支援多種資料來源,包括 Hive,Avro,Parquet,ORC,JSON 和 JDBC;
- 支援 HiveQL 語法以及使用者自定義函式 (UDF),允許你訪問現有的 Hive 倉庫;
- 支援標準的 JDBC 和 ODBC 連線;
- 支援優化器,列式儲存和程式碼生成等特性,以提高查詢效率。
3.2 Spark Streaming
Spark Streaming 主要用於快速構建可擴充套件,高吞吐量,高容錯的流處理程式。支援從 HDFS,Flume,Kafka,Twitter 和 ZeroMQ 讀取資料,並進行處理。
Spark Streaming 的本質是微批處理,它將資料流進行極小粒度的拆分,拆分為多個批處理,從而達到接近於流處理的效果。
3.3 MLlib
MLlib 是 Spark 的機器學習庫。其設計目標是使得機器學習變得簡單且可擴充套件。它提供了以下工具:
- 常見的機器學習演演算法:如分類,迴歸,聚類和協同過濾;
- 特徵化:特徵提取,轉換,降維和選擇;
- 管道:用於構建,評估和調整 ML 管道的工具;
- 永續性:儲存和載入演演算法,模型,管道資料;
- 實用工具:線性代數,統計,資料處理等。
3.4 Graphx
GraphX 是 Spark 中用於圖形計算和圖形平行計算的新元件。在高層次上,GraphX 通過引入一個新的圖形抽象來擴充套件 RDD(一種具有附加到每個頂點和邊緣的屬性的定向多重圖形)。為了支援圖計算,GraphX 提供了一組基本運運算元(如: subgraph,joinVertices 和 aggregateMessages)以及優化後的 Pregel API。此外,GraphX 還包括越來越多的圖形演演算法和構建器,以簡化圖形分析任務。
更多大資料系列文章可以參見 GitHub 開源專案: 大資料入門指南
