Spark1.6源码之Application注册机制
来源:互联网 发布:ubuntu 3306 是否开放 编辑:程序博客网 时间:2024/06/05 16:59
Spark1.6源码之Application注册机制
注意: 1.6版本的spark很明显重构了大量了代码、注册和调度机制优化了不少。这里主要讲的是Spark自身的Standalone模式。
大概流程: 这里分析的注册机制主要是讲当Master Receive到Regist Request之后所做的操作
- 1、Application Regist classPath:org.apache.spark.deploy.master.Master
- 当Master的RpcEndpoint接收到app注册消息后(模式匹配),会根据参数ApplicationDescription来创建ApplicationInfo
- 然后保存该app的Rpc通信地址到Master的成员变量addressToApp,这就是注册操作。(只保存到内存)
- 进行一次持久化引擎的保存操作,方便Master恢复机制读取数据。
- 返回Driver注册成功的结果,包含了appId,和Master的通信对象RpcEndpointRef
- 1.1 接收注册消息
//1.6版本后、为了弱化Akka,spark采用RpcEnv方式来做RPC通信,这里是接收消息的方法 override def receive: PartialFunction[Any, Unit] = { case ElectedLeader => case CompleteRecovery => case RevokedLeadership => // .......................... case RegisterApplication(description, driver) => //这里就是接收注册appd的消息 if (state == RecoveryState.STANDBY) { // 如果当前master是备用的,则直接忽略,不发送任何消息 } else { // 创建Application val app = createApplication(description, driver) // 把创建好的App注册到Master里便于管理 registerApplication(app) // 使用持久化引擎来保存当前app的状态 persistenceEngine.addApplication(app) // 向提交这个app的driver返回注册结果、地址等. driver.send(RegisteredApplication(app.id, self)) // 这个方法很重要,在 《Spark1.6源码之Master调度机制》里会讲到 schedule() } }
1.2 创建Application
//接收ApplicationDescription类的对象,这个类里包含了启动这个App的详细参数信息(name、maxCores、memoryPerExecutorMB...),这个对象作为ApplicationInfo类的属性当做引用使用private def createApplication(desc: ApplicationDescription, driver: RpcEndpointRef): ApplicationInfo = { val now = System.currentTimeMillis() val date = new Date(now) val appId = newApplicationId(date) // ApplicationInfo才是创建真正的Application,这个类有一些操作Executor的方法 new ApplicationInfo(now, appId, desc, date, driver, defaultCores) }
1.3 注册Application
private def registerApplication(app: ApplicationInfo): Unit = { val appAddress = app.driver.address //拿到提交这个app的Driver的通信地址 //addressToApp变量是HashMap<RpcAddress, ApplicationInfo>,保存着启动每个app所对应的dreiver地址对应关系,如果已经存在,说明这个地址已经启动了app,不予重新启动 if (addressToApp.contains(appAddress)) { logInfo("Attempted to re-register application at same address: " + appAddress) return } //统计系统相关、暂不讨论 applicationMetricsSystem.registerSource(app.appSource) apps += app //把当前app加入所有app集合序列里 idToApp(app.id) = app // id -> app 的对应关系集合 endpointToApp(app.driver) = app //endpointToApp存的是HashMap<RpcEndpointRef, ApplicationInfo>,保存了每个消息发送方所对应的app addressToApp(appAddress) = app waitingApps += app //这个集合保存了需要处理的app集合、这个集合是随时增减的。 if (reverseProxy) { webUi.addProxyTargets(app.id, app.desc.appUiUrl) } }
阅读全文
0 0
- Spark1.6源码之Application注册机制
- Spark1.6源码之Worker注册机制
- Spark1.6源码之资源调度机制
- Spark1.6源码之Master主备切换机制
- spark源码分析之master注册application
- Spark通信机制:1)Spark1.3 vs Spark1.6源码分析
- 开发Spark1.5.2 Application | 编译Spark源码
- Spark1.6源码编译
- Spark1.6源码之Task任务提交源码分析
- spark源码学习(十五)--- application注册机制分析
- spark1.2.0源码分析之ShuffleMapTask
- hadoop2.7.3源码解析之datanode注册和心跳机制
- Spark源码分析之Master注册机制原理
- spark1.2.0源码分析之RDD的reduce操作
- spark1.2.0源码分析之ShuffledRDD的Stage划分
- spark1.2.0源码分析之ShuffledRDD抓取数据
- spark1.2.0源码分析之spark streaming执行工作流程
- spark1.2.0源码分析之spark streaming保存数据
- leetcode(538). Convert BST to Greater Tree
- ios之计算UILabel的高度
- 网页中经常见到的前进后退功能实现
- 关注民生民情
- 题目1034:寻找大富翁
- Spark1.6源码之Application注册机制
- git ignore template
- ACM进阶
- bugku 域名解析
- Just do it————(多校第7场 hdu6129)
- BAT资深算法工程师「Deep Learning」读书系列分享(一) | 分享总结
- notepad++使用技巧
- Windows10下安装Ubuntu17.04双系统(无图)
- JUnit4-Description.java 源代码 解读与分析