spark源码学习(十五)--- application注册机制分析
来源:互联网 发布:贝叶斯学派全知理论 编辑:程序博客网 时间:2024/06/13 04:40
首先看master的定义,继承自actor,说明是一个线程。
private[spark] class Master( host: String, port: Int, webUiPort: Int, val securityMgr: SecurityManager, val conf: SparkConf) extends Actor with ActorLogReceive with Logging with LeaderElectable {
找到处理appliction注册的请求:
case RegisterApplication(description) => { if (state == RecoveryState.STANDBY) { //如果当前是standbymaster,那么application来请求注册什么都不做 // ignore, don't send response } else { //active状态 logInfo("Registering app " + description.name) //使用description创建appliction对象 val app = createApplication(description, sender) //注册appliction,将applictionInfo加入缓存,讲appliction加入等待调度的队列 registerApplication(app) logInfo("Registered app " + description.name + " with ID " + app.id) //使用持久化引擎持久化appliction信息 persistenceEngine.addApplication(app) //actor之间发信息的方法:反向向sparkdeployschedulerbackend的appclint的Clientactor //发送消息,注意方法是RegisteredApplication,Registered而不是Register sender ! RegisteredApplication(app.id, masterUrl) schedule() } }
上面调用了createappliction,里面的参数descrption封装了appliction需要的资源信息,core,mem等。。。
private[spark] class ApplicationDescription( val name: String, val maxCores: Option[Int], val memoryPerSlave: Int, val command: Command, var appUiUrl: String, val eventLogDir: Option[String] = None, // short name of compression codec used when writing event logs, if any (e.g. lzf) val eventLogCodec: Option[String] = None) extends Serializable {
还是createappliction方法:
def createApplication(desc: ApplicationDescription, driver: ActorRef): ApplicationInfo = { val now = System.currentTimeMillis() val date = new Date(now) new ApplicationInfo(now, newApplicationId(date), desc, date, driver, defaultCores) }使用时间,descrption创建了一个applictionInfo对象。返回付给app对象。然后调用注册方法:registerApplication(app)。
def registerApplication(app: ApplicationInfo): Unit = { //首先拿到dirver的地址 val appAddress = app.driver.path.address if (addressToApp.contains(appAddress)) { //如果该driver地址已经存在,认为是重复注册,那么就直接返回 logInfo("Attempted to re-register application at same address: " + appAddress) return } applicationMetricsSystem.registerSource(app.appSource) //------------将driver信息加入到内存缓存中 //HashSet,去重app apps += app //hashmap idToApp(app.id) = app //HashMap actorToApp(app.driver) = app addressToApp(appAddress) = app //------------将app加入等待调度的缓存队列,waitingApps是ArrayBuffer,fifo的一个线程队列 waitingApps += app }
阅读全文
0 0
- spark源码学习(十五)--- application注册机制分析
- spark源码分析之master注册application
- Spark源码分析之Master注册机制原理
- spark源码学习(十二)--- checkpoint机制分析
- spark学习十五 spark的容错分析
- Spark1.6源码之Application注册机制
- spark源码学习(二)---Master源码分析(1)-master的主备切换机制
- spark源码学习(二)---Master源码分析(2)-master内组件状态改变机制
- Spark内核源码深度剖析:Master注册机制原理剖析与源码分析
- spark源码学习(十)--- blockManager分析
- spark源码学习(十一)---cacheManager分析
- spark源码阅读(十五)--securityManager
- netty源码分析(十五)Channel注册流程深度解读
- Spark的Master分析2(Master注册机制原理分析)
- Spark源码分析之BlockManager通信机制
- Spark源码分析之Checkpoint机制
- spark源码学习(七)--- TaskScheduler源码分析
- spark源码学习(九)--- shuffle过程源码分析
- 算法之堆排序
- Mysql修改密码
- C++中 Unicode 与 UTF-8 编码互转
- python中的迭代器和生成器
- 对抗博弈 alpha-beta剪枝
- spark源码学习(十五)--- application注册机制分析
- 51nod1605 博弈
- 算术运算符
- 实模式和保护模式
- 彻底弄懂HTTP缓存机制及原理
- 数据结构与算法的基础概念
- HashSet存储元素保证唯一性的代码及图解
- navicat安装及破解
- ubuntu系统的gcc版本切换