spark架構及生態

通常當需要處理的數據量超過了單機尺度(比如我們的計算機有4GB的內存,而我們需要處理100GB以上的數據)這時我們可以選擇spark集羣進行計算,有時我們可能需要處理的數據量並不大,但是計算很複雜,需要大量的時間,這時我們也可以選擇利用spark集羣強大的計算資源,並行化地計算,其架構示意圖如下

  • Spark Core:包含Spark的基本功能;尤其是定義RDD的API、操作以及這兩者上的動作。其他Spark的庫都是構建在RDD和Spark Core之上的
  • Spark SQL:提供通過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進行交互的API。每個數據庫表被當做一個RDD,Spark SQL查詢被轉換爲Spark操作。
  • Spark Streaming:對實時數據流進行處理和控制。Spark Streaming允許程序能夠像普通RDD一樣處理實時數據
  • MLlib:一個常用機器學習算法庫,算法被實現爲對RDD的Spark操作。這個庫包含可擴展的學習算法,比如分類、迴歸等需要對大量數據集進行迭代的操作。
  • GraphX:控制圖、並行圖操作和計算的一組算法和工具的集合。GraphX擴展了RDD API,包含控制圖、創建子圖、訪問路徑上所有頂點的操作
  • Spark架構的組成圖如下:

  • Cluster Manager:在standalone模式中即爲Master主節點,控制整個集羣,監控worker。在YARN模式中爲資源管理器
  • Worker節點:從節點,負責控制計算節點,啓動Executor或者Driver。
  • Driver: 運行Application 的main()函數
  • Executor:執行器,是爲某個Application運行在worker node上的一個進程

Spark與hadoop:


  • Hadoop有兩個核心模塊,分佈式存儲模塊HDFS和分佈式計算模塊Mapreduce
  • spark本身並沒有提供分佈式文件系統,因此spark的分析大多依賴於Hadoop的分佈式文件系統HDFS
  • Hadoop的Mapreduce與spark都可以進行數據計算,而相比於Mapreduce,spark的速度更快並且提供的功能更加豐富

 運行流程及特點:

  1. 構建Spark Application的運行環境,啓動SparkContext
  2. SparkContext向資源管理器(可以是Standalone,Mesos,Yarn)申請運行Executor資源,並啓動StandaloneExecutorbackend,
  3. Executor向SparkContext申請Task
  4. SparkContext將應用程序分發給Executor
  5. SparkContext構建成DAG圖,將DAG圖分解成Stage、將Taskset發送給Task Scheduler,最後由Task Scheduler將Task發送給Executor運行
  6. Task在Executor上運行,運行完釋放所有資源

     Spark運行特點:

  1. 每個Application獲取專屬的executor進程,該進程在Application期間一直駐留,並以多線程方式運行Task。這種Application隔離機制是有優勢的,無論是從調度角度看(每個Driver調度他自己的任務),還是從運行角度看(來自不同Application的Task運行在不同JVM中),當然這樣意味着Spark Application不能跨應用程序共享數據,除非將數據寫入外部存儲系統
  2. Spark與資源管理器無關,只要能夠獲取executor進程,並能保持相互通信就可以了
  3. 提交SparkContext的Client應該靠近Worker節點(運行Executor的節點),最好是在同一個Rack裏,因爲Spark Application運行過程中SparkContext和Executor之間有大量的信息交換
  4. Task採用了數據本地性和推測執行的優化機制

常用術語:


  • Application: Appliction都是指用戶編寫的Spark應用程序,其中包括一個Driver功能的代碼和分佈在集羣中多個節點上運行的Executor代碼
  • Driver:  Spark中的Driver即運行上述Application的main函數並創建SparkContext,創建SparkContext的目的是爲了準備Spark應用程序的運行環境,在Spark中有SparkContext負責與ClusterManager通信,進行資源申請、任務的分配和監控等,當Executor部分運行完畢後,Driver同時負責將SparkContext關閉,通常用SparkContext代表Driver
  • Executor:  某個Application運行在worker節點上的一個進程,  該進程負責運行某些Task, 並且負責將數據存到內存或磁盤上,每個Application都有各自獨立的一批Executor, 在Spark on Yarn模式下,其進程名稱爲CoarseGrainedExecutor Backend。一個CoarseGrainedExecutor Backend有且僅有一個Executor對象, 負責將Task包裝成taskRunner,並從線程池中抽取一個空閒線程運行Task, 這個每一個oarseGrainedExecutor Backend能並行運行Task的數量取決與分配給它的cpu個數
  • Cluter Manager:指的是在集羣上獲取資源的外部服務。目前有三種類型
    1. Standalon : spark原生的資源管理,由Master負責資源的分配
    2. Apache Mesos:與hadoop MR兼容性良好的一種資源調度框架
    3. Hadoop Yarn: 主要是指Yarn中的ResourceManager
  • Worker: 集羣中任何可以運行Application代碼的節點,在Standalone模式中指的是通過slave文件配置的Worker節點,在Spark on Yarn模式下就是NoteManager節點
  • Task: 被送到某個Executor上的工作單元,但hadoopMR中的MapTask和ReduceTask概念一樣,是運行Application的基本單位,多個Task組成一個Stage,而Task的調度和管理等是由TaskScheduler負責
  • Job: 包含多個Task組成的並行計算,往往由Spark Action觸發生成, 一個Application中往往會產生多個Job
  • Stage: 每個Job會被拆分成多組Task, 作爲一個TaskSet, 其名稱爲Stage,Stage的劃分和調度是有DAGScheduler來負責的,Stage有非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種,Stage的邊界就是發生shuffle的地方
  • DAGScheduler: 根據Job構建基於Stage的DAG(Directed Acyclic Graph有向無環圖),並提交Stage給TASkScheduler。 其劃分Stage的依據是RDD之間的依賴的關係找出開銷最小的調度方法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章