Spark簡介
Spark是基于內存的分布式計算框架。在迭代計算的場景下,數據處理過程中的數據可以存儲在內存中,提供了比MapReduce高10到100倍的計算能力。Spark可以使用HDFS作為底層存儲,使用戶能夠快速地從MapReduce切換到Spark計算平臺上去。Spark提供一站式數據分析能力,包括小批量流式處理、離線批處理、SQL查詢、數據挖掘等,用戶可以在同一個應用中無縫結合使用這些能力。
Spark的特點如下:
- 通過分布式內存計算和DAG(無回路有向圖)執(zhí)行引擎提升數據處理能力,比MapReduce性能高10倍到100倍。
- 提供多種語言開發(fā)接口(Scala/Java/Python),并且提供幾十種高度抽象算子,可以很方便構建分布式的數據處理應用。
- 結合SQL、Streaming等形成數據處理棧,提供一站式數據處理能力。
- 支持契合Hadoop生態(tài)環(huán)境,Spark應用可以運行在Standalone、Mesos或者YARN上,能夠接入HDFS、HBase、Hive等多種數據源,支持MapReduce程序平滑轉接。
Spark結構介紹
模塊名稱
|
描述
|
---|---|
Cluster Manager |
集群管理器,管理集群中的資源。Spark支持多種集群管理器,Spark自帶的Standalone集群管理器、Mesos或YARN。Spark集群默認采用YARN模式。 |
Application |
Spark應用,由一個Driver Program和多個Executor組成。 |
Deploy Mode |
部署模式,分為cluster和client模式。cluster模式下,Driver會在集群內的節(jié)點運行;而在client模式下,Driver在客戶端運行(集群外)。 |
Driver Program |
是Spark應用程序的主進程,運行Application的main()函數并創(chuàng)建SparkContext。負責應用程序的解析、生成Stage并調度Task到Executor上。通常SparkContext代表Driver Program。 |
Executor |
在Work Node上啟動的進程,用來執(zhí)行Task,管理并處理應用中使用到的數據。一個Spark應用一般包含多個Executor,每個Executor接收Driver的命令,并執(zhí)行一到多個Task。 |
Worker Node |
集群中負責啟動并管理Executor以及資源的節(jié)點。 |
Job |
一個Action算子(比如collect算子)對應一個Job,由并行計算的多個Task組成。 |
Stage |
每個Job由多個Stage組成,每個Stage是一個Task集合,由DAG分割而成。 |
Task |
承載業(yè)務邏輯的運算單元,是Spark平臺上可執(zhí)行的最小工作單元。一個應用根據執(zhí)行計劃以及計算量分為多個Task。 |
Spark原理及相關介紹
Spark原理
Spark的應用運行結構如下圖。
運行流程如下:
1、應用程序(Application)是作為一個進程的集合運行在集群上的,由Driver進行協調。
2、在運行一個應用時,Driver會去連接集群管理器(Standalone、Mesos、YARN)申請運行Executor資源,并啟動ExecutorBackend。然后由集群管理器在不同的應用之間調度資源。Driver同時會啟動應用程序DAG調度、Stage劃分、Task生成。
3、然后Spark會把應用的代碼(傳遞給SparkContext的JAR或者Python定義的代碼)發(fā)送到Executor上。
4、所有的Task執(zhí)行完成后,用戶的應用程序運行結束。
Spark Streaming
Spark Streaming是一種構建在Spark上的實時計算框架,擴展了Spark處理大規(guī)模流式數據的能力。當前Spark支持兩種數據處理方式:Direct Streaming和Receiver方式。
SparkSQL和DataSet
SparkSQL是Spark中用于結構化數據處理的模塊。在Spark應用中,可以無縫地使用SQL語句亦或是DataSet API對結構化數據進行查詢。
SparkSQL以及DataSet還提供了一種通用的訪問多數據源的方式,可訪問的數據源包括Hive、CSV、Parquet、ORC、JSON和JDBC數據源,這些不同的數據源之間也可以實現互相操作。SparkSQL復用了Hive的前端處理邏輯和元數據處理模塊,使用SparkSQL可以直接對已有的Hive數據進行查詢。
另外,SparkSQL還提供了諸如API、CLI、JDBC等諸多接口,對客戶端提供多樣接入形式。
SparkSession
SparkSession是Spark編程的統一API,也可看作是讀取數據的統一入口。SparkSession提供了一個統一的入口點來執(zhí)行以前分散在多個類中的許多操作,并且還為那些較舊的類提供了訪問器方法,以實現最大的兼容性。
Structured Streaming
Structured Streaming是構建在Spark SQL引擎上的流式數據處理引擎,用戶可以使用Scala、Java、Python或R中的Dataset/DataFrame API進行流數據聚合運算、按事件時間窗口計算、流流Join等操作。當流數據連續(xù)不斷的產生時,Spark SQL將會增量的、持續(xù)不斷的處理這些數據并將結果更新到結果集中。同時,系統通過checkpoint和Write Ahead Logs確保端到端的完全一次性容錯保證。
Structured Streaming的核心是將流式的數據看成一張不斷增加的數據庫表,這種流式的數據處理模型類似于數據塊處理模型,可以把靜態(tài)數據庫表的一些查詢操作應用在流式計算中,Spark執(zhí)行標準的SQL查詢,從不斷增加的無邊界表中獲取數據。
Spark與其他組件的關系
-
Spark和HDFS的配合關系
通常,Spark中計算的數據可以來自多個數據源,如Local File、HDFS等。最常用的是HDFS,用戶可以一次讀取大規(guī)模的數據進行并行計算。在計算完成后,也可以將數據存儲到HDFS。
分解來看,Spark分成控制端(Driver)和執(zhí)行端(Executor)??刂贫素撠熑蝿照{度,執(zhí)行端負責任務執(zhí)行。
通常,Spark中計算的數據可以來自多個數據源,如Local File、HDFS等。最常用的是HDFS,用戶可以一次讀取大規(guī)模的數據進行并行計算。在計算完成后,也可以將數據存儲到HDFS。
分解來看,Spark分成控制端(Driver)和執(zhí)行端(Executor)。控制端負責任務調度,執(zhí)行端負責任務執(zhí)行。
-
Spark和YARN的配合關系
Spark的計算調度方式,可以通過YARN的模式實現。Spark共享YARN集群提供豐富的計算資源,將任務分布式的運行起來。Spark on YARN分兩種模式:YARN Cluster和YARN Client。
Spark的計算調度方式,可以通過YARN的模式實現。Spark共享YARN集群提供豐富的計算資源,將任務分布式的運行起來。Spark on YARN分兩種模式:YARN Cluster和YARN Client。