Spark是什么
Spark是開源分布式計算引擎,用于大規(guī)模數據分析
Spark特點
速度快:在內存時的運行速度是Hadoop MapReduce的10~100倍
易用:支持Java、Scala、Python、R、SQL等多種語言的API,可以使用基于Scala、Python、R、SQL的Shell交互式查詢
通用:提供了一個完整的技術棧
兼容:可以運行在Hadoop Yarn、Apache Mesos、K8s、Spark StandAlone等集群中,可以訪問HBase、HDFS、Hive、Cassandra在內的多種數據庫
Spark部署模式
本地模式
所有Spark組件和Spark應用程序都在同一臺機器上運行。適合于本地開發(fā)和測試
集群模式
在集群模式下,還可以選擇client模式和cluster模式運行應用程序。client模式是driver程序運行在提交作業(yè)的客戶端機器上,適合開發(fā)環(huán)境;cluster模式是driver程序在集群中運行,適合生產環(huán)境
standalone模式
Spark自帶的集群管理器,不依賴其他系統(tǒng)。適用于中小規(guī)模集群
yarn模式
在yarn上運行,由yarn負責資源管理,Spark負責任務調度和計算。適用于hadoop集群
mesos模式
在mesos上運行,由yarn負責資源管理,Spark負責任務調度和計算。適用于mesos集群
k8s模式
在k8s上運行,由k8s負責資源管理,Spark負責任務調度和計算。適用于k8s集群
云服務模式
在云平臺(AWS EMR、Google Dataproc、Azure HDinsight、阿里云E-MapReduce)上運行,由云平臺負責資源管理
Spark框架模塊
Spark Core
功能:包含Spark的基本功能,包括任務調度、內存管理、存儲管理、容錯機制等,內部采用RDD數據抽象,并提供了很多API來創(chuàng)建和操作RDD,為其它組件提供底層服務。
用途:支持其它高層組件的運行,為開發(fā)者提供底層API
Spark SQL
功能:用于結構化數據處理的模塊,支持使用SQL查詢Hive、HBase等多種外部數據源中的數據,可以和Spark的RDD API無縫集成
用途:查詢結構化數據,與Hive集成,支持HiveQL查詢
Spark Streaming
功能:用于實時數據流進行處理和分析,接受來自Kafka、Flume等多種數據源的實時數據
用途:實時日志分析、實時監(jiān)控和報警
MLlib
功能:機器學習庫,提供了常見的機器學習算法和工具,包括分類、回歸、聚類、協同過濾等常見算法,以及模型評估、數據預處理等功能
用途:機器學習模型訓練和部署
GraphX
功能:圖計算框架,用于處理圖結果數據
用途:社交網絡分析、網頁排名
Spark運行架構
從資源管理層面,Spark有Master和Worker節(jié)點。Master負責集群資源管理,分配Application到Worker節(jié)點,維護Worker節(jié)點、Driver和Application的狀態(tài)。Worker節(jié)點負責具體任務的執(zhí)行。
從程序運行層面,Spark有Driver和Executor。Driver充當單個Spark任務運行過程中的管理者,Executor充當單個Spark任務運行過程中的執(zhí)行者。
Cluster Manager
是Spark集群資源管理器,存在于Master節(jié)點上,主要用于對整個集群資源進行管理和分配
Worker
是Spark的工作節(jié)點,用于執(zhí)行提交的任務,主要的工作職責有:
- 通過注冊機制想Cluster Manager匯報自身的CUP、內存等資源使用信息
- 在集群管理器的指示下,創(chuàng)建并啟用Executor
- Cluster Manager將資源和Task分配給Worker節(jié)點上的Executor執(zhí)行
- Worker節(jié)點同步Executor狀態(tài)和資源信息給Cluster Manager
Executor
是真正執(zhí)行計算任務的組件,是Application運行在Worker上的一個進程。這個進程負責Task的運行,并將數據保存在內存或者磁盤中,也能夠將結果返回給Driver
Application
是基于Spark API編寫的應用程序,包括實現Driver功能的代碼和集群中各個Executor上要執(zhí)行的代碼。一個Application由多個Jobs組成,其中Application的入口是用戶定義的main()方法
Driver
是Spark的驅動器節(jié)點,可以運行在Application節(jié)點上,也可以由Application提交給Cluster Manager,再由Cluster Manager安排Worker進行運行,其主要的工作職責有:
- Application通過Driver跟Cluster Manager及Executor進行通信
- 運行Application的main()函數
- 創(chuàng)建SparkContext
4.劃分RDD并生成DAG
5.創(chuàng)建Job并將每個Job拆分為多個Stage,每個Stage由多個Task構成,也被稱為Task Set
6.生成并發(fā)送Task到Executor
7.在各個Executor進程間協調Task的調度
8.與Spark中的其他組件進行資源協調
Spark運行流程
- 啟動Driver,創(chuàng)建SparkContext
- Client提交程序給Driver,Driver向Cluster Manager申請集群資源
- 資源申請完畢,在Worker中啟動Executor
- Driver將應用程序轉化為Tasks,分發(fā)給Executor執(zhí)行
- Driver從Executor收集計算結果,將結果保存下來或者返回給用戶
- 應用程序執(zhí)行完成后,Driver向Cluster Manager釋放申請的資源