Spark簡介以及架構

Spark是什么?
Spark是基于內存計算的大數據并行計算框架.Spark基于內存計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量的廉價硬件之上,形成集群
Spark誕生于加州大學伯利克分校AMPLab
AMPLab開發以Spark為核心的BDAS時提出的目標是:one stack to rule them all,也就是說在一套軟件棧內完成各種大數據分析任務.

Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存儲層,可融入
Hadoop的生態系統,以彌補缺失MapReduce的不足
Spark相比Hadoop MapReduce的優勢如下:
(1)中間結果輸出
基于MapReduce的計算引擎通常會將中間結果輸出到磁盤上,進行存儲和容錯。出于
任務管道承接的考慮,當一些查詢翻譯到MapReduce任務時,往往會產生多個Stage,而
這些串聯的Stage又依賴于底層文件系統(如HDFS)來存儲每一個Stage的輸出結果。
Spark將執行模型抽象為通用的有向無環圖執行計劃(DAG),這可以將多Stage的任
務串聯或者并行執行,而無須將Stage中間結果輸出到HDFS中。類似的引擎包括Dr yad、
Tez。
(2)數據格式和內存布局
Spark抽象出分布式內存存儲結構彈性分布式數據集RDD,進行數據的存儲。RDD能支持粗粒度寫操作,但對于讀取操作,RDD可以精確到每條記錄,這使得RDD可以用來作為分布式索引
Spark的特性是能夠控制數據在不同節點上的分區,用戶可以自定義分區策略,如Hash分區等.Shark和Spark SQL在Spark的基礎上實現了列存儲和列存儲壓縮
(3)執行策略
Spark任務在shuffle中不是所有情景都需要排序,所以支持基于Hash的分布式聚合,調度中采用更為通用的任務執行計劃圖(DAG),每一輪次的輸出結果在內存緩存
(4)任務調度的開銷
傳統的MapReduce系統,是為了運行長達數小時的批量作業而設計的,在某些極端的情況下,提交一個任務的延遲非常高
Spark采用了事件驅動的類庫AKKA來啟動任務,通過線程池復用線程來避免進程或線程啟動和切換開銷

Spark生態系統BDAS(Berkeley Data Analytics Stack)
目前,Spark已經發展成為包含眾多子項目的大數據計算平臺。伯克利將Spark的整個
生態系統稱為伯克利數據分析棧(BDAS)。其核心框架是Spark,同時BDAS涵蓋支持結
構化數據SQL查詢與分析的查詢引擎Spark SQL和Shark,提供機器學習功能的系統
MLbase及底層的分布式機器學習庫MLlib、并行圖計算框架GraphX、流計算框架Spark
Streaming、采樣近似計算查詢引擎BlinkDB、內存分布式文件系統Tachyon、資源管理框
架Mesos等子項目。這些子項目在Spark上層提供了更高層、更豐富的計算范式。
圖1-1為BDAS的項目結構圖。

Paste_Image.png

圖1-1 伯克利數據分析棧(BDAS)項目結構圖
下面對BDAS的各個子項目進行更詳細的介紹。
(1)Spark
Spark是整個BDAS的核心組件,是一個大數據分布式編程框架,不僅實現了MapReduce的算子map函數和reduce函數及計算模型,還提供更為豐富的算子,如filter、join、groupByKey等.其底層采用Scala這種函數式語言書寫而成,并且所提供的API深度借鑒Scala函數式的編程思想,提供與Scala類似的編程接口。
圖1-2為Spark的處理流程(主要對象為RDD)。

Paste_Image.png

Spark將數據在分布式環境下分區,然后將作業轉化為有向無環圖(DAG),并分階段進行DAG的調度和任務的分布式并行處理。

(2)Shark
Shark是構建在Spark和Hive基礎之上的數據倉庫。Shark底層復用Hive的解析器、優化
器以及元數據存儲和序列化接口。Shark會將Hive QL編譯轉化為一組Spark任務,進行分布式運算。

(3)Spark SQL
Spark SQL提供在大數據上的SQL查詢功能,類似于Shark在整個生態系統的角色,它們可以統稱為SQL on Spark。Spark SQL使用Catalyst做查詢解析和優化器,并在底層使用Spark作為執行引擎實現SQL的Operator

(4)Spark Streaming
Spark Streaming通過將流數據按指定時間片累積為RDD,然后將每個RDD進行批處理,進而實現大規模的流數據處理。其吞吐量能夠超越現有主流流處理框架Storm,并提供豐富的API用于流數據計算。

(5)GraphX
GraphX基于BSP模型,在Spark之上封裝類似Pregel的接口,進行大規模同步全局的圖計算,尤其是當用戶進行多輪迭代時,基于Spark內存計算的優勢尤為明顯

(6)Tachyon
Tachyon是一個分布式內存文件系統,可以理解為內存中的HDFS。為了提供更高的性能,將數據存儲剝離Java Heap

(7)Mesos
Mesos是一個資源管理框架,提供類似于YARN的功能。用戶可以在其中插件式地運行Spark、MapReduce、Tez等計算框架的任務。Mesos會對資源和任務進行隔離,并實現高效的資源任務調度。

(8)BlinkDB
BlinkDB是一個用于在海量數據上進行交互式SQL的近似查詢引擎。它允許用戶通過在查詢準確性和查詢響應時間之間做出權衡,完成近似查詢。其數據的精度被控制在允許的誤差范圍內。為了達到這個目標,BlinkDB的核心思想是:通過一個自適應優化框架,隨著時間的推移,從原始數據建立并維護一組多維樣本;通過一個動態樣本選擇策略,選擇一個適當大小的示例,然后基于查詢的準確性和響應時間滿足用戶查詢需求。

Spark架構
Spark是整個BDAS的核心。生態系統中的各個組件通過Spark來實現對分布式并行任務處理的程序支持
Spark架構采用了分布式計算中的Master-Slave模型。Master是對應集群中的含有Master進程的節點,Slave是集群中含有Worker進程的節點。Master作為整個集群的控制器,負責整個集群的正常運行;Worker相當于是計算節點,接收主節點命令與進行狀態匯報;Executor負責任務的執行;Client作為用戶的客戶端負責提交應用,Driver負責控制一個應用的執行,如圖1-4所示。

Paste_Image.png

Spark集群部署后,需要在主節點和從節點分別啟動Master進程和Worker進程,對整個集群進行控制。在一個Spark應用的執行過程中,Driver和Worker是兩個重要角色。Driver程序是應用邏輯執行的起點,負責作業的調度,即Task任務的分發,而多個Worker用來管理計算節點和創建Executor并行處理任務。在執行階段,Driver會將Task和Task所依賴的file和jar序列化后傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理。
下面詳細介紹Spark的架構中的基本組件。

·ClusterManager:在Standalone模式中即為Master(主節點),控制整個集群,監控Worker。在YARN模式中為資源管理器。

Worker:從節點,負責控制計算節點,啟動Executor或Driver。在YARN模式中為NodeManager,負責計算節點的控制

·Driver:運行Application的main()函數并創建SparkContext。

·Executor:執行器,在worker node上執行任務的組件、用于啟動線程池運行任務。每個Application擁有獨立的一組Executors。

·SparkContext:整個應用的上下文,控制應用的生命周期

·RDD:Spark的基本計算單元,一組RDD可形成執行的有向無環圖RDD Graph

·DAG Scheduler:根據作業(Job)構建基于Stage的DAG,并提交Stage給
TaskScheduler。

·TaskScheduler:將任務(Task)分發給Executor執行。

·TaskScheduler:將任務(Task)分發給Executor執行。

·SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。

SparkEnv內創建并包含如下一些重要組件的引用。
·MapOutPutTracker:負責Shuffle元信息的存儲。
·BroadcastManager:負責廣播變量的控制與元信息的存儲。
·BlockManager:負責存儲管理、創建和查找塊。
·MetricsSystem:監控運行時性能指標信息。
·SparkConf:負責存儲配置信息。

Spark的整體流程為:Client提交應用,Master找到一個Worker啟動Driver,Driver向Master或者資源管理器申請資源,之后將應用轉化為RDD Graph,再由DAGScheduler將RDD Graph轉化為Stage的有向無環圖提交給TaskScheduler,由TaskScheduler提交任務給Executor執行。在任務執行的過程中,其他組件協同工作,確保整個應用順利執行。

Spark運行邏輯
如圖1-5所示,在Spark應用中,整個執行流程在邏輯上會形成有向無環圖(DAG)。Action算子觸發之后,將所有累積的算子形成一個有向無環圖,然后由調度器調度該圖上的任務進行運算。Spark的調度方式與MapReduce有所不同。Spark根據RDD之間不同的依賴關系切分形成不同的階段(Stage),一個階段包含一系列函數執行流水線。圖中的A、B、C、D、E、F分別代表不同的RDD,RDD內的方框代表分區。數據從HDFS輸入
Spark,形成RDD A和RDD C,RDD C上執行map操作,轉換為RDD D,RDD B和RDDE執行join操作,轉換為F,而在B和E連接轉化為F的過程中又會執行Shuffle,最后RDD F通過函數saveAsSequenceFile輸出并保存到HDFS中。

Paste_Image.png

Spark分布式架構與單機多核架構的異同

1)在單機多核環境下,多CPU共享內存和磁盤。當系統所需的計算和存儲資源不夠,需要擴展CPU和存儲時,單機多核系統顯得力不從心。
2)大規模分布式并行處理系統是由許多松耦合的處理單元組成的,要注意的是,這里指的是處理單元而非處理器。每個單元內的CPU都有自己私有的資源,如總線、內存、硬盤等。這種結構最大的特點在于不共享資源。在不共享資源(Share Nothing)的分布式架構下,節點可以實現無限擴展,即計算能力和存儲的擴展性可以成倍增長。

在分布式運算下,數據盡量本地運算,減少網絡I/O開銷。由于大規模分布式系統要在不同處理單元之間傳送信息,在網絡傳輸少時,系統可以充分發揮資源的優勢,達到高效率。也就是說,如果操作相互之間沒有什么關系,處理單元之間需要進行的通信比較少,則采用分布式系統更好。因此,分布式系統在決策支持(DSS)和數據挖掘(DataMining)方面具有優勢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容