Deploy模块

来源:互联网 发布:网络客服招聘条件 编辑:程序博客网 时间:2024/06/08 11:20

5.1 Spark运行模式

Spark支持Standalone,Mesos,YARN,EC2,Local部署模式

5.1.1 Local模式

1)local

使用单线程处理计算任务,不会重新计算失败的计算任务

2)local[N]/local[*]

前者使用N线程处理计算任务,后者工作线程数取决于CPU Cores,保证一个工作线程可以占有一个CPUCore,同样不会重新计算失败的任务

3)local[threads,maxFailures]threads设置工作线程数,maxFailures设置失败的最大重试次数

4)local-cluster[numSlaves,coresPerSlave,memoryPerSlave]伪分布式模式,本机会运行Master和Worker,其中numSlaves为Worker数量,coresPerSlaves每个Worker能使用的CPU Core数memoryPerSlave设置每个Worker能使用的内存数

Worker接收到Master发送的LaunchExecutor消息后,会创建ExecutorRunner,进而启动CoraseGrainedExecutorBackend,进而启动Executor(运行多个TaskRunner)

 

5.1.2 YARN模式

Client提交Job后,ApplicationMaster会向ResourceManager请求资源,获取资源后ApplicationMaster会在NodeManager上启动Container,运行计算任务,并能和Container保持联系,监控任务的运行状态

1)YARN Cluster模式

Ø  YARN Client提交Application至ResourceManager

Ø  ResourceManager在任意工作节点启动ApplicationMaster,期间会创建YarnClusterScheduler以及YarnClusterSchedulerBackend

Ø  ApplicationMaster在NodeManager上启动若干Container用于启动CoraseGrainedExecutorBackend

Ø  CoraseGrainedExecutorBackend启动Executor

 

2)YARN Client模式

与Cluster模式区别在于Client模式的Client与Driver在同一台机器上

Ø  SparkContext初始化创建YarnClientClusterScheduler和YarnClientSchedulerBackend(可与CoraseGrainedSchedulerBackend通信)

Ø  YarnClientSchedulerBackend启动Client,用于提交Application至ResourceManager

 

5.2 模块整体架构

1)Master用于资源调度以及Application管理,Worker的注册以及管理所有的Worker,接收Client提交的Application,FIFO调度等待的Application并向Worker提交

2)Worker用于接收资源分配调度命令并启动Executor,向Master注册自己,根据Master发送的Application配置进程环境并启动StandaloneExecutorBackend

3)Client用于创建Application,并向Master注册Application并监控Application

4)Executor执行具体的计算任务

 

5.3 消息传递机制

Master与Worker之间采用AKKA通信

1)Worker向Master发送的消息

注册(RegisterWorker):Worker启动时需要向Master注册,并汇报自身信息

状态汇报(ExecutorStateChanged和DriverStateChanged):汇报Executor和Driver的运行状态;Master故障时需要汇报Worker上当前运行的Executor和Driver信息(WorkSchedulerStateResponse)

报活心跳(Heartbeat):Worker周期性的想Master发送报活心跳

2)Master向Worker发送的信息

Worker注册成功(RegisteredWorker),Worker注册失败(RegisterWorkerFailed),告诉Worker需要重新注册(ReconnectWorker),Worker删除指定Executor(KillExecutor),Worker启动Executor(LaunchExecutor),Worker启动Driver(LaunchDriver),Worker删除Driver(KillDriver)

 

Master与Client(Driver Client和AppClient)

1)DriverClient与Master

向Master提交Driver(RequestSubmitDriver),向Master杀死Driver(RequestKillDriver),获取Driver的当前运行状态(RequestDriverStatus)

2)Master与Driver Client

Master向Driver返回注册响应(SubmitDriverResponse)

Master向Driver返回杀死Driver响应(KillDriverResponse)

Master向Driver返回状态信息(DriverStatusResponse)

 

AppClient持有ClientActor

1)AppClient与Master

AppClient向Master注册Application(RegisterApplication)

Master故障恢复后通知AppClient和Worker(MasterChangeAcknowledged)

2)Master与AppClient

回复Application的注册结果(RegisteredApplication)

Worker启动Executor通知AppClient(ExecutorAdded)

Executor的状态更新通知AppClient(ExecutorUpdated)

通知AppClient停止Application(ApplicationRemoved)

Master故障恢复后需要通知AppClient和Worker(MasterChanged)

 

Driver与Executor

1)Driver向Executor

启动Task(LaunchTask)

杀死Task(KillTask)

注册成功反馈(RegisteredExecutor)

注册失败反馈(RegisteredExecutorFailed)

2)Executor向Drvier

注册Executor(RegisterExecutor)

汇报Executor运行的Task状态(StatusUpdate)

 

5.4 集群的启动

5.4.1 Master启动

1)ZooKeeper

元数据信息会持久化到ZooKeeper中,当Master故障后,ZooKeeper会备份Master中选举新的Master作为Leader,新的Master会从ZooKeeper中获取元数据信息并恢复数据

2)FILESYSTEM

集群的元数据信息保存在本地文件系统中,Master启动后立即成为Active的Master

3)CUSTOM

用户自定义,需要实现StandaloneRecoveryModeFactory,需要实现

createPersistenceEngine()持久化和恢复数据

createLeaderElectionAgent()从Standby的Master中选举一个Master作为集群的Leader

4)NONE

不会持久化集群的元数据,Master启动后立即接管集群的管理工作

 

被选举为Leader的Master会读取元数据信息,Master状态变为RecoveryState.RECOVERING然后开始恢复数据并通知Worker,AppClient,Driver Client,Master已经改变,恢复结束后的Master状态变为RecoveryState.ALIVE(只有为ALIVE状态时才能向外提供服务)

 

Master故障恢复时需要对Application,Worker,Driver Client的元数据恢复(beginRecovery),基本操作都是先将其状态置为UNKNOWN,Master再通知其MasterChanged,Master接收到其响应后,会将其状态从UNKNOWN设置为正常状态,当所有的UNKNOWN均变为正常状态后,则会调用completeRecovery()完成恢复,其工作原理:

1)RecoveryState.COMPLETING_RECOVERY更新Recovery状态

2)清除所有未响应的Worker和Application

3)对于未分配Worker的Driver Client确定是否需要重新启动

4)Master状态置为ALIVE,Master可对外提供服务

 

5.4.2 Worker启动

Worker启动只会向Master发送注册请求(RegisterWorker),Master会向Worker反馈注册成功或者失败(RegisterWorker or RegisterWorkerFailed),Worker在一段时间内未收到Master的反馈则会重新注册(默认至多重试16次)

 

Worker.registerWithMaster(第一次调用时会向所有的Master进行注册即tryRegisterAllMasters()),注册成功后,Worker可对外提供服务

 

5.5 集群容错处理

5.5.1 Master异常退出

推荐使用ZooKeeper实现Master的容错

5.5.2 Worker异常退出

1)Worker退出前会清除在它上面运行的所有Driver Client和Executor

2)Worker需要周期性的向Master发送心跳信息,将Executor标记为丢失,对于Driver Client设置为需要重启,否则直接清除

3)AppClient接到Master的StatusUpdate消息后更新汇报给SparkDeploySchedulerBackend并判断是否是Executou异常退出,然后重新调度,Task分配新的Executor

5.5.3 Executor异常退出

Executor启动的调用栈:

1)Worker接收到Master的LaunchExecutor命令后,创建ExecutorRunner

2)ExecutorRunner.fetchAndRunExecutor负责向Driver注册Executor

3)CoarseGrainedSchedulerBackend(负责与Driver通信并汇报Executor状态)接收到Driver的RegisteredExecutor后创建Executor

 

Executor异常退出,Master会为Application分配新的Executor,若超过10次,则Application标记失败

原创粉丝点击