Spark學習

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框架模塊

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運行架構

從資源管理層面,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í)行提交的任務,主要的工作職責有:

  1. 通過注冊機制想Cluster Manager匯報自身的CUP、內存等資源使用信息
  2. 在集群管理器的指示下,創(chuàng)建并啟用Executor
  3. Cluster Manager將資源和Task分配給Worker節(jié)點上的Executor執(zhí)行
  4. 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進行運行,其主要的工作職責有:

  1. Application通過Driver跟Cluster Manager及Executor進行通信
  2. 運行Application的main()函數
  3. 創(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運行流程

  1. 啟動Driver,創(chuàng)建SparkContext
  2. Client提交程序給Driver,Driver向Cluster Manager申請集群資源
  3. 資源申請完畢,在Worker中啟動Executor
  4. Driver將應用程序轉化為Tasks,分發(fā)給Executor執(zhí)行
  5. Driver從Executor收集計算結果,將結果保存下來或者返回給用戶
  6. 應用程序執(zhí)行完成后,Driver向Cluster Manager釋放申請的資源

參考資料

  1. 一文理解Spark的基本概念和工作原理
  2. 初識 Spark - 7000字+15張圖解,學習 Spark 入門基礎知識
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spark是什么 Spark是基于HDFS等分布式存儲之上的數據處理分析框架,它擅長批量數據處理,處理流工作負載,...
    奔跑地蝸牛閱讀 961評論 0 0
  • RDD RDD的全稱是:Resilient Distributed Dataset (彈性分布式數據集) 五個關鍵...
    阿濤哥閱讀 594評論 0 0
  • Spark基礎知識 Spark是基于內存的計算框架,但是也存在磁盤IO。 使用的排序算法:歸并排序(大數據里基本都...
    Jorvi閱讀 322評論 0 0
  • Spark相關 Spark是用于大數據處理的集群計算框架,沒有使用MapReduce作為執(zhí)行引擎,而是使用了自研的...
    Vechace閱讀 3,495評論 0 16
  • spark入門 1. spark和hadoop的區(qū)別 Hadoop主要解決,海量數據的存儲和海量數據的分析計算 S...
    安申閱讀 180評論 0 0