zoukankan      html  css  js  c++  java
  • 深入探究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就到达了真正计算的步骤。
  • 相关阅读:
    Vuejs之Component slot 插槽详解
    ASP.NET MVC生命周期与管道模型
    Unity IoC Base On MVC
    轻量级IoC框架Ninject.NET搭建
    原创【前端控件】之日历控件
    出现了内部错误-网站中X509Certificate2加载证书时出错
    windows service 1053错误 启动失败
    关于浏览器Number.toFixed的错误修复
    vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦
    ubuntu开发项目不能执行热更新
  • 原文地址:https://www.cnblogs.com/kinghey-java-ljx/p/8522573.html
Copyright © 2011-2022 走看看