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