Master原理剖析和源码分析

  1. 主备切换机制原理剖析
    Spark原生的standalone模式是支持主备切换的,也就是说master可以配置两个,当Action Master因故障挂了的时候,系统会自动将Standby Master 切换成 Active Master。
    Master主备切换基于两种机制,一种是基于文件系统,一种是基于zookeeper。基于文件系统的主备切换系统在master挂了之后,需要手动切换到Standby Master。基于zookeeper的主备切换在Active Master 挂了之后系统会自动切换到Standby Master。
    所以,这里要说的Master主备切换机制,实际上指的是在Active Master 挂掉之后切换到 Standby Master,Master都需要做什么
Created with Raphaël 2.1.0 StandBy Master 使用持久化引擎读取持久化的storedApps、storedDrivers、storedWorkers、 FileSystemPersisenceEngine、ZookeeperPersistenceEngine 判断,如果storedApps、storedDrivers、storedWorkers有任何一个非空的 将持久化的Application、Driver、Worker的信息重新注册,注册到Master内部的内存缓存结构中 将Application和Worker的状态都修改为UNKNOWN,然后向Application所对应的Driver, 以及Worker发送的Standby Master的地址 Driver和Worker,理论上来说,如果它们目前都是正常运行的话, 那么在接收到Master发送过来的地址之后,就会返回响应消息给新的Master 此时,Master在陆续接收到的Driver和Worker发送来的响应消息之后, 调用Master自己的scheduler()方法,对正在等待资源调度的Driver和Application进行调度, 比如在某个Worker上启动Driver,或者为Application在Worker上启动它需要的Executor
  1. 注册机制原理剖析和源码分析

    driver 、worker 、application都会向master注册
    这里我们以application注册为例

        //处理Application注册的请求
    case RegisterApplication(description, driver) => {
      // 如果master的状态是standby,也就是当前这个master,是standby master,不是active master
      // 那么Application来请求注册,什么都不会干
      // TODO Prevent repeated registrations from some driver
      if (state == RecoveryState.STANDBY) {
        // ignore, don't send response
      } else {
        logInfo("Registering app " + description.name)
        // 用ApplicationDescription信息,创建ApplicationInfo
        val app = createApplication(description, driver)
        //注册Application
        //将Application加入缓存,将Application加入等待调度的队列-waitingApps
        registerApplication(app)
        logInfo("Registered app " + description.name + " with ID " + app.id)
        //使用持久化引擎,将Application进行持久化
        persistenceEngine.addApplication(app)
        driver.send(RegisteredApplication(app.id, self))
        schedule()
      }
    } 

你可能感兴趣的:(Master原理剖析和源码分析)