1. 程式人生 > 程式設計 >Spark 系列(一)—— Spark 簡介

Spark 系列(一)—— Spark 簡介

一、簡介

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 以及數百個其他資料來源中的資料。

https://github.com/heibaiying

三、叢集架構

Term(術語) Meaning(含義)
Application Spark 應用程式,由叢集上的一個 Driver 節點和多個 Executor 節點組成。
Driver program 主運用程式,該程式執行應用的 main() 方法並且建立 SparkContext
Cluster manager 叢集資源管理器(例如,Standlone Manager,Mesos,YARN)
Worker node 執行計算任務的工作節點
Executor 位於工作節點上的應用程式,負責執行計算任務並且將輸出資料儲存到記憶體或者磁碟中
Task 被髮送到 Executor 中的工作單元

https://github.com/heibaiying

執行過程:

  1. 使用者程式建立 SparkContext 後,它會連線到叢集資源管理器,叢集資源管理器會為使用者程式分配計算資源,並啟動 Executor;
  2. Dirver 將計算程式劃分為不同的執行階段和多個 Task,之後將 Task 傳送給 Executor;
  3. 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 讀取資料,並進行處理。

https://github.com/heibaiying

Spark Streaming 的本質是微批處理,它將資料流進行極小粒度的拆分,拆分為多個批處理,從而達到接近於流處理的效果。

https://github.com/heibaiying

3.3 MLlib

MLlib 是 Spark 的機器學習庫。其設計目標是使得機器學習變得簡單且可擴充套件。它提供了以下工具:

  • 常見的機器學習演演算法:如分類,迴歸,聚類和協同過濾;
  • 特徵化:特徵提取,轉換,降維和選擇;
  • 管道:用於構建,評估和調整 ML 管道的工具;
  • 永續性:儲存和載入演演算法,模型,管道資料;
  • 實用工具:線性代數,統計,資料處理等。

3.4 Graphx

GraphX 是 Spark 中用於圖形計算和圖形平行計算的新元件。在高層次上,GraphX 通過引入一個新的圖形抽象來擴充套件 RDD(一種具有附加到每個頂點和邊緣的屬性的定向多重圖形)。為了支援圖計算,GraphX 提供了一組基本運運算元(如: subgraph,joinVertices 和 aggregateMessages)以及優化後的 Pregel API。此外,GraphX 還包括越來越多的圖形演演算法和構建器,以簡化圖形分析任務。

更多大資料系列文章可以參見 GitHub 開源專案: 大資料入門指南