1. 程式人生 > >Spark入門(一)

Spark入門(一)

mesos 實現 spl tracker cell 文件系統 bcf 不同的 pad

Spark是什麽?

Spark是一個用來實現快速而通用的集群計算的平臺。擴展了廣泛使用的MapReduce計算模型,而且高效地支持更多的計算模式,包括交互式查詢和流處理。在處理大規模數據集的時候,速度是非常重要的。Spark的一個重要特點就是能夠在內存中計算,因而更快。即使在磁盤上進行的復雜計算,Spark依然比MapReduce更加高效。Spark與Hadoop緊密集成,他可以在YARN上運行,並支持Hadoop文件格式及其儲存後端HDFS

Spark與MapReduce的區別

      Mapreduce             Spark
數據存儲結構:hdfs文件系統的split

使用內存構建彈性分布式數據集RDD,對數據進行運算和cache

編程範式:Map+Reduce   計算中間數據在內存中的維護,存取速度是磁盤的多個數量級
Task以進程的方式維護,任務啟動就要幾秒鐘  Task以線程的方式維護,對小數集的讀取能達到亞秒級的延遲

Spark運行模式

  1. Local  主要用於開發調試Spark應用程序
  2. Standalone  利用Spark自帶的資源管理與調度器運行spark集群,采用Master/Slave結構,為解決單節點故障,可以采用Zookeper實現高可用(HA)
  3. Apache Mesos   運行在Mesos資源管理框架上,集群的運行將資源管理交給Mesos,Spark只負責運行任務調度和計算
  4. Hadoop YARN 集群運行在YRAN資源管理器上,資源管理交給YARN,Spark只負責進行任務調度和計算(最為常用的模式)

Spark組件

技術分享圖片

組件的功能

ClusterManager:在Standalone模式中即為Master節點(主節點),控制整個集群,監控Worker.在YARN中為ResourceManagerWorker:從節點,負責控制計算節點,啟動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內構建並包含如下一些重要組件的引用:

1、MapOutPutTracker:負責Shuffle元信息的存儲。
2、BroadcastManager:
負責廣播變量的控制與元信息的存儲。
3、BlockManager:
負責存儲管理、創建和查找快。
4、MetricsSystem:
監控運行時性能指標信息。
5、SparkConf:
負責存儲配置信息。

組件的執行流程

1. 每個Spark應用都由一個驅動器程序(Driver Program)來發起集群上的各種並行操作。啟動器包含應用的main函數,驅動器負責創建SparkContext(上下文);SparkContext可以與不同種類的集群資源管理器(Cluster Manager),例如Yarn進行通信。

2. SparkContext 獲取到集群進行所需的資源後,將得到集群中工作階段(Worker Node)上對應的 Executor(不同的Spark程序有不同的Executor,他們之間是互相獨立的進程,Executor為應用程序提供分布式計算以及數據存儲功能)

3. 之後SparkContext將應用程序代碼發送到各個Executor,最後將Task(任務)分配給Executors執行

提交任務的流程

1、Client提交應用。

2、Master找到一個Worker啟動Driver

3、DriverMaster或者資源管理器申請資源,之後將應用轉化為RDD Graph

4、再由DAGScheduleRDD Graph轉化為Stage的有向無環圖提交給TaskSchedule。

5、再由TaskSchedule提交任務給Executor執行。

6、其它組件協同工作,確保整個應用順利執行。

技術分享圖片

使用YARN提交任務

1、基於YARN的Spark作業首先由客戶端生成作業信息,提交給ResourceManager

2、ResourceManager在某一NodeManager匯報時把AppMaster分配給NodeManager。

3、NodeManager啟動SparkAppMaster。

4、SparkAppMastere啟動後初始化然後向ResourceManager申請資源。

5、申請到資源後,SparkAppMaster通過RPCNodeManager啟動相應的SparkExecutor

6、SparkExecutorSparkAppMaster匯報並完成相應的任務。

7、SparkClient會通過AppMaster獲取作業運行狀態。

技術分享圖片

參考博客

Spark入門(一)