Spark中文指南(入門篇)-Spark編程模型(一)

前言

本章將對Spark作一個簡單的介紹,更多教程請參考: Spark教程

本章知識點歸納

  • Apache Spark簡介
  • Spark的四種運行模式
  • Spark基於Standlone的運行流程
  • Spark基於YARN的運行流程

Apache Spark是什麼?

Spark是一個用來實現快速而通用的集羣計算的平臺。擴展了普遍使用的MapReduce計算模型,並且高效地支持更多的計算模式,包括交互式查詢和流處理。在處理大規模數據集的時候,速度是很是重要的。Spark的一個重要特色就是可以在內存中計算,於是更快。即便在磁盤上進行的複雜計算,Spark依然比MapReduce更加高效。html

Spark重要概念

(1)Spark運行模式

目前Spark的運行模式主要有如下幾種:node

  • local:主要用於開發調試Spark應用程序
  • Standlone:利用Spark自帶的資源管理與調度器運行Spark集羣,採用Master/Slave結構,爲解決單點故障,能夠採用Xookeeper實現高可靠(High Availability, HA)
  • Apache Mesos:運行在著名的Mesos資源管理框架基礎之上,該集羣運行模式將資源管理管理交給Mesos,Spark只負責運行任務調度和計算
  • Hadoop YARN:集羣運行在Yarn資源管理器上,資源管理交給YARN,Spark只負責進行任務調度和計算
    Spark運行模式中Hadoop YARN的集羣方式最爲經常使用,前面一章關於Spark集羣搭建就是採用的YARN模式。apache

    (2)Spark組件(Components)

    一個完整的Spark應用程序,如前面一章當中的SparkWorkdCount程序,在提交集羣運行時,它涉及到以下圖所示的組件:編程

Spark組件

每一個Spark應用都由一個驅動器程序(drive program)來發起集羣上的各類並行操做。驅動器程序包含應用的main函數,驅動器負責建立SparkContext,SparkContext能夠與不一樣種類的集羣資源管理器(Cluster Manager),例如Hadoop YARN,Mesos進行通訊,獲取到集羣進行所需的資源後,SparkContext將
獲得集羣中工做節點(Worker Node)上對應的Executor(不一樣的Spark程序有不一樣的Executor,他們之間是相互獨立的進程,Executor爲應用程序提供分佈式計算以及數據存儲功能),以後SparkContext將應用程序代碼發送到各Executor,最後將任務(Task)分配給executors執行app

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

    一、MapOutPutTracker:負責Shuffle元信息的存儲。
    二、BroadcastManager:負責廣播變量的控制與元信息的存儲。
    三、BlockManager:負責存儲管理、建立和查找快。
    四、MetricsSystem:監控運行時性能指標信息。
    五、SparkConf:負責存儲配置信息。

Spark的總體流程

一、Client提交應用。  
二、Master找到一個Worker啓動Driver  
三、Driver向Master或者資源管理器申請資源,以後將應用轉化爲RDD Graph  
四、再由DAGSchedule將RDD Graph轉化爲Stage的有向無環圖提交給TaskSchedule。  
五、再由TaskSchedule提交任務給Executor執行。  
六、其它組件協同工做,確保整個應用順利執行。

圖片:框架

Spark有向無環圖

Spark on Yarn流程:

一、基於YARN的Spark做業首先由客戶端生成做業信息,提交給ResourceManager。  
二、ResourceManager在某一NodeManager彙報時把AppMaster分配給NodeManager。  
三、NodeManager啓動SparkAppMaster。
四、SparkAppMastere啓動後初始化而後向ResourceManager申請資源。  
五、申請到資源後,SparkAppMaster經過RPC讓NodeManager啓動相應的SparkExecutor。  
六、SparkExecutor向SparkAppMaster彙報並完成相應的任務。  
七、SparkClient會經過AppMaster獲取做業運行狀態。

SparkOnYARN

參考文檔

問題

  • 針對SparkContext和Drive program尚未解釋清楚
  • 關於Driver向Master請求資源這一塊還沒搞懂
  • 關於Spark的總體流程圖仍是不太準確,之後找到好的再補上
相關文章
相關標籤/搜索