筆記:Spark簡介

Spark簡介

Spark是什麼

  • Spark是基於內存計算的大數據並行計算框架
  • Spark是MapReduce的替代方案

Spark與Hadoop

Spark是一個計算框架,而Hadoop中包含計算框架MapReduce和分佈式文件系統HDFS,Hadoop更普遍地說還包括在其生態系統上的其餘系統.算法

Spark的優點

中間結果輸出

  • 基於MapReduce的計算引擎一般會將中間結果輸出到磁盤上,進行儲存和容錯.當一些查詢翻譯到MapReduce任務是,每每會產生多個Stage,而這些串聯的Stage又依賴於底層的文件系統來存儲每個Stage的輸出結果.
  • Spark將執行模型抽象爲通用的有向無環圖執行計劃(Directed Acyclic Graph,DAG).這能夠將多個Stage的任務串聯或者並行執行,而無須將Stage中間結果輸出到HDFS中.相似的引擎包括Dryad,Tez

數據格式和內存佈局

Spark抽象出分佈式內存儲存結構彈性分佈式數據集RDD,進行數據存儲.RDD能支持粗粒度寫操做,但對於讀取操做,RDD能夠精確到每條記錄,這使得RDD能夠用來做爲分佈式索引.sql

執行策略

MapReduce在數據Shuffle以前花費了大量的時間來排序,Spark任務在Shuffle中不是全部情景都須要排序.因此支持Hash的分佈式聚合,調度中採用更爲通用的任務執行計劃圖(DAG),每一輪次的輸出結果在內存中緩存.編程

任務調度的開銷

  • 傳統的MapReduce系統,如Hadoop,是爲了運行常達數小時的批量做業而設計的
  • Spark採用了事件驅動的類庫AKKA來啓動任務,經過線程池複用線程來避免進程或線程啓動和切換開銷

Spark能帶來什麼

打造全棧多計算範式的高效數據流水線

Spark支持複雜查詢(SQL查詢,流式計算,機器學習和圖算法)緩存

輕量級快速處理

  • 這是因爲Scala語言的簡潔和豐富的表達力
  • Spark充分利用和集成Hadoop等其餘第三方組件
  • Spark經過將中間結果緩存在內存減小磁盤I/O來達到性能的提高

易於使用,Spark支持多語言

  • Spark支持經過Scala,Java,Python編寫程序
  • 同事容許在Shell中進行交互計算
  • 用戶能夠利用Spark像書寫單機程序同樣編寫分佈式程序

與HDFS等存儲層兼容

  • Spark能夠獨立運行,除了能夠運行在當下的YARN等集羣管系統以外,它還能夠讀取已有的任何Hadoop數據
  • 它能夠運行在任何Hadoop數據源上,好比Hive,HBase,HDFS等

Spark的侷限性

  • RDD模型適合的是粗粒度的全局數據並行計算,不適合細粒度的,須要異步更新的計算
  • 若是針對特定工做負載達到最優性能,仍是須要使用一些其餘的大數據系統

Spark生態系統BDAS

Spark

  • Spark是整個BDAS的核心組件,是一個大數據分佈式編程框架,不只實現了MapReduce的算子map函數和reduce函數的計算模型,還提供了更爲豐富的算子,如filter,join,groupByKey等.
  • Spark將分佈式數據集(RDD),實現了應用任務調度,RPC,序列化和壓縮,併爲運行在其上的上層組件提供API.
  • 底層採用Scala這種函數式語言書寫成
  • 所提供的API深度借鑑Scala函數式的編程思想,提供與Scala相似的編程接口
  • Spark將數據在分佈式環境下分區,而後將做業轉化爲有向無環圖(DAG),並分階段進行DAG的調度和任務的分佈式並行處理

Shark

  • Shark是構建在Spark和Hive基礎上的數據倉庫
  • Shark已經完成學術使命,終止開發,但其架構和原理仍具備借鑑意義
  • 提供了可以查詢Hive中所儲存數據的一套SQL接口,兼容現有的Hive QL語法
  • 熟悉Hive QL和SQL的用戶能夠基於Shark進行快速的Ad-Hoc,Reporting等類型的SQL查詢
  • Shark底層複用Hive的解析器,優化器以及元數據存儲和序列化接口
  • Shark將Hive QL編譯轉化爲一組Spark任務,進行分佈式運算

Spark SQL

  • Spark SQL提供在大數據上的SQL查詢功能
  • Spark SQL使用Catalyst作查詢解析和優化器,並在底層使用Spark做爲執行引擎實現的SQL的Operator
  • 用戶能夠在Spark上直接書寫SQL

Spark Streaming

  • Spark Streaming經過將流數據按指定時間片累積爲RDD,而後將RDD進行批處理,進而實現大規模的流數據處理

GraphX

  • GraphX基於BSP模型,在Spark之上,封裝相似Pregel的接口,進而大規模同步全局的圖計算
  • 當用戶進行多輪迭代時,基於Spark內存計算的優點尤其明顯

Tachyon

  • Tachyon是一個分佈式內存文件系統,能夠理解爲內存中的HDFS
  • 爲了提供更高的性能,將數據存儲剝離Java Heap
  • 用戶能夠經過Tachyon實現RDD或者文件的跨應用共享,並提升容錯機制,保證數據的可靠性

Mesos

  • Mesos是一個資源管理框架
  • 提供相似於YARN的功能
  • 用戶能夠在其中插件式地運行Spark,MapReduce,Tez等計算框架任務
  • Mesos對資源和任務進行隔離,並實現高效的資源任務調度

BlinkDB

  • BlinkDB是一個用於在海量數據上進行交互式SQL的近似查詢引擎
  • 容許用戶經過查詢準確性和查詢時間之間作出權衡,完成近似查詢
  • 核心思想:經過一個自適應優化框架,隨着時間的推移,從原始數據創建並維護一組多維樣本,經過一個動態樣本選擇策略,選擇一個適當大小的示例,而後基於查詢的準確性和響應時間知足用戶查詢需求

Spark架構

  • Spark是整個BDAS的核心,各個組件經過Spark來實現對分佈式並行任務處理的程序支持

Spark代碼結構

Spark Core
名稱 說明
scheduler 文件夾中含有負責總體的Spark應用,任務調度的代碼
broadcast 含有Broadcast(廣播變量)的實現代碼,API中是Java和Python API的實現
deploy 含有Spark部署與啓動運行的代碼
common 不是一個文件夾,而是表明Spark通用的類和邏輯實現
metrics 是運行時狀態監控邏輯代碼,Executor中含有Worker節點負責計算的邏輯代碼
partial 含有近似評估代碼
network 含有集羣通訊模塊代碼
serializer 含有存儲模塊的代碼
storage 含有存儲模塊的代碼
ui 含有監控界面的代碼邏輯,其餘的代碼模塊分別是對Spark生態系統中其餘組件的實現
其餘
名稱 說明
streaming Spark Streaming的實現代碼
YARN Spark on YARN的部分實現代碼
praphx 含有GraphX實現代碼
interpreter 交互式Shell代碼
mllib 表明MLlib算法實現的代碼
sql 表明Sqark SQL的代碼

Spark的架構

  • Spark架構採用了分佈式計算中的Master-Slave模型.Master是對應集羣中的含有Master進程的節點,Slave是集羣中含有Worker進程的節點
    • Master做爲整個集羣的控制器,負責整個集羣的正常運行
    • Worker至關因而計算節點,接受主節點命令與進行狀態彙報
    • Executer負責任務的執行
    • Client做爲用戶的客戶端,負責提交應用
    • Driver負責控制一個應用的執行
  • Spark集羣部署後,須要在主節點和從節點分別啓動Master進程和Worker進程,對整個集羣進行控制
  • 在一個Spark應用的執行過程當中,Driver和Worker是兩個重要角色
    • Driver程序是應用邏輯執行的起點,負責做業的調度,即執行Task任務的分發
    • 多個Worker用來管理計算節點和建立Executor並行處理任務
    • 在執行階段,Driver會將Task和Task所依賴的file和jar序列化後傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理

Spark架構中的基本組件

組件名 介紹
ClusterManager 在Standalone模式中即爲Master(主節點),控制整個集羣,監控Master.在YARN中爲資源管理器
Worker 從節點,負責控制計算節點.啓動Executor或Driver.在YARN模式中爲NodeManager,負責計算節點的控制
Driver 運行Application的main()函數並建立SparkContext
Executor 執行器,在worker node上執行任務的組件,用於啓動線程池運行任務.每一個Application擁有獨立的一組Executors
SparkContext 整個應用的上下文,控制應用的生命週期
RDD Spark的基本計算單元,一組RDD可造成執行的有向無環圖RDD Graph
DAG Scheduler 根據做業構建基於Stage的DAG,並提交Stage給TaskScheduler
TaskScheduler 將任務分發給Executor執行
SparkEnv 線程級別的上下文,存儲運行時的重要組件的引用

SparkEnv內建立幷包含以下一些重要組件的引用架構

SparkEnv內建立幷包含的重要組件的引用
組件 介紹
MapOutPutTracker 負責Shuffle元信息的存儲
BroadcastManager 負責廣播變量的控制與雲信息的存儲
BlockManager 負責存儲管理,建立和查找塊
MetricsSystem 監控運行時性能指標信息
SparkConf 負責存儲配置信息

Spark的總體流程

  1. Client提交應用
  2. Master找到一個Worker啓動Driver
  3. Driver向Master或者資源管理器申請資源,以後將應用轉化爲RDD Grath
  4. DAGScheduler將RDD Graph轉化爲Stage的有向無環圖提交給TaskScheduler
  5. TaskScheduler提交任務給Executor執行
  6. 任務執行過程當中,其餘組件協同工做

Spark運行邏輯

  • 在Spark應用中,整個執行流程在邏輯上會造成有向無環圖.Action算子觸發以後,將全部累積的算子造成一個有向無環圖.
  • Action算子觸發以後,將全部累積的算子造成一個有向無環圖,而後由調度器調度該圖上的任務進行運算
  • Spark根據RDD之間不一樣的依賴關係切分紅不一樣的階段,一個階段包含一系列函數執行流水線
相關文章
相關標籤/搜索