深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)
生活随笔
收集整理的這篇文章主要介紹了
深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
部署方式有:Standalone(Spark的Deploy模塊)、Mesos、YARN、EC2、Local SparkContext創建時,通過傳入的Master URL不同,創建不同的SchedulerBackend和TaskScheduler,在spark.SparkContext#createTaskSchuster實現 Master URL: local:以一個工作線程運行計算任務,不重新計算失敗的計算任務 local[N]/[*]:N個線程,或是啟動與CPU core相等數量的線程,也是不會重新計算失敗 local[threads, maxFailures]:設置線程數與最大的失敗重試數 local-cluster[numSlaves, coresPerSlave, memoryPerSlave]:本機運行Master和Worker,三個參數分別設置worker的數量、core數、內存 前三種方式,SchedulerBackend的實現是scheduler.local.LocalBackend,TaskScheduler的實現是scheduler.TaskSchedulerImpl,它也有LocalActor,通過這個與Executor 第四種為偽分布式,和Standalone類似,只不過都運行在同一個機器。SB的實現是scheduler.cluster.SparkDeploy-SchedulerBackend,TS的實現是scheduler.Task-SchedulerImpl Worker接到Master的LaunchExecutor信息后,創建實例ExecutorRunner,啟動一個新的進程,它的實現是spark.executor.Coarse-GrainedExecutorBackend。它不在Worker進程內 Local-cluster可以啟動多個Worker Mesos:采用Master/Slave架構,主要由Master、Slave、Framework、Executor組成,通過ZooKeeper實現Master高可用 Mesos資源調度分為粗粒度與細粒度調度 粗粒度就是每個Executor獲得資源就長期持有,直到應用程序退出才釋放。優點是減少資源調度的開銷,缺點就是資源被長期占有,會造成資源浪費 細粒度就是根據任務實際動態申請,避免了資源浪費,但同時調度的時間開銷更大 通過spark.mesos.coarse來設置是粗還是細 YARN:重點關注一下 YARN包括ResourceManager負責全局管理所有應用的計算資源分配,每一臺機器的NodeManager管理應用在這臺機器上的進程并組織計算 ApplicationMaster負責調度和協調,結合從RM獲得的資源和NM協同工作,每一個應用對應的AM的職責有向調度器索取、運行任務、跟蹤與監控狀態和進程、處理任務失敗 RM不對應用進行監控和跟蹤,是基于應用程序的純粹調度器,把資源分給多個隊列和應用 NM是每臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源使用并向調度器匯報 過程:Client提交Job后,AM向RM請求資源,獲得后AM在NM上啟動Container,運行計算任務,并監控任務(一個應用對應一個AM,而一個AM對應管理多個NM) YARN的Cluster模式: 通過YARN調度Spark Application所需資源。Application通過YARN Client提交到RM,RM在一個工作節點啟動AM(注冊為YARN ApplicationMaster),開始應用的提交(spark.deploy.yarn.ApplicationMaster) TaskScheduler的實現是spark.scheduler.cluster.YarnClusterScheduler,它完成了AM的初始化。AM通過RM和NM的接口啟動若干個容器作為spark.executor.CoarseGrainedExecutorBackend,最終啟動Executor YARN的Client模式: 與Cluster模式區別在于提交Application的SparkContext在本地,適合Application需要與本地交互的場景;Cluster模式是計算的全部節點都在YARN節點上進行。 SparkContext創建spark.scheduler.cluster.YarnClient-ClusterScheduler和spark.scheduler.cluster.YarnClientSchedulerBackend,分別是兩個模塊的實現。其中SchedulerBackend可以和ExecutorBackend通過AKKA通信,并向RM提交Application,AM負責在多個節點上啟動Executor Standalone: Master/Slave架構,Master負責整個集群的資源調度和Application管理,Slave(Worker)接收Master資源調度命令后啟動Executor,并最終完成計算任務。 Client負責Application的創建和向Master注冊,并接收Executor的狀態更新和計算結果。 Master、Worker、Client都是通過AKKA通信,Master和Worker都是一個Actor Master:接收Worker注冊并管理所有Worker,接收Client提交Application,并提交給Worker Worker:向Master注冊自己,根據Master發送的Application配置進程環境,并啟動StandaloneExecutorBackend Client:向Master注冊并監控Application。創建SparkContext時生成SparkDeploySchedulerBackend,就會向Master發送請求了 Standalone模式是通過Spark的Deploy模塊就能實現,部署簡單,有利于推廣Spark 得到計算資源Executor,Task就到達了真正計算的步驟。
轉載于:https://www.cnblogs.com/kinghey-java-ljx/p/8522573.html
總結
以上是生活随笔為你收集整理的深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行黑金卡有什么待遇?看完你就清楚了!
- 下一篇: Mac 下查看网络端口占用情况