Spark源码之路(二):Master原理剖析与源码分析

一、涉及到的源码列表:

  1. Master.scala
  2. WorkerInfo.scala
  3. DriverDescription.scala
  4. RecoveryState.scala
  5. PersistenceEngine.scala
  6. MetricsSystem.scala
  7. ApplicationDescription.scala
  8. DeployMessage.scala
    等等

##二、语言叙述(包括截图):
A:主备切换
1.概述: 关键词——(standalong模式,Active Master,两种主备切换模式,具体操作)
spark的standalone模式提供了master的HA,与hadoop一样,一个是active,一个是standby状态。spark HA的主备切换主要基于两种机制:基于文件系统和基于zk集群。前者在挂了后需要手动切换,而基于zk的HA可以自动实现切换。
图 1
这里写图片描述

2.主备切换的简要流程:关键词——(等待的Master,持久化引擎,如果不为空,重新注册到内存,修改状态,发送master地址,检测过滤,schedule()调度)
图 2
这里写图片描述

B:注册机制

  1. 注册机制:关键词——(注册woker、application,持久化,schedule,在队列中等待调度)
    这里写图片描述
    C:状态改变机制

D:资源调度机制(schedule(),目前两种资源调度方法)

##三、相应源码查看学习:

  1. Master.scala
    定义一些变量:
// RecoveryState有STANDBY, ALIVE, RECOVERING, COMPLETING_RECOVERY四个阶段
  private var state = RecoveryState.STANDBY
  // 持久化引擎
  private var persistenceEngine: PersistenceEngine = _
  private var leaderElectionAgent: LeaderElectionAgent = _
  private var recoveryCompletionTask: ScheduledFuture[_] = _
  private var checkForWorkerTimeOutTask: ScheduledFuture[_] = _
  // 在有更好的配置内存的方法之前,作为暂时的 workaround ,我们允许用户设置一个标志,
  // 这个标志 will perform round-robin scheduling across the nodes (spreading out each app
  // among all the nodes) instead of trying to consolidate each app onto a small # of nodes.
  private val spreadOutApps = conf.getBoolean("spark.deploy.spreadOut", true)
  // 如果不特别指定,就对applications默认使用MaxValue值 (i.e. pass Int.MaxValue)
  private val defaultCores = conf.getInt("spark.deploy.defaultCores", Int.MaxValue)

onStart函数(Inbox.scala中有调用它)

override def onStart(): Unit = {
    // 在使用Spark-shell时,常看见的一些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值