原创

Executor源码分析

Executor源码的最主要代码是TaskRunner,TaskRunner是一个多线程,首先看其runner方法:

//对序列化的task数据,进行反序列化
Executor.taskDeserializationProps.set(taskDescription.properties)
//通过网络通信,将需要的文件、资源、jar拷贝过来
updateDependencies(taskDescription.addedFiles, taskDescription.addedJars)

1、CoarseGrainedExecutorBackend

worker中为application启动的executor,实际上是启动了CoarseGrainedExecutorBackend进程,CoarseGrainedExecutorBackend的启动方法:

override def onStart() {
  logInfo("Connecting to driver: " + driverUrl)
  rpcEnv.asyncSetupEndpointRefByURI(driverUrl).flatMap { ref =>
    // This is a very fast action so we can use "ThreadUtils.sameThread"
    driver = Some(ref)
    ref.ask[Boolean](RegisterExecutor(executorId, self, hostname, cores, extractLogUrls))
  }(ThreadUtils.sameThread).onComplete {
    // This is a very fast action so we can use "ThreadUtils.sameThread"
    case Success(msg) =>
      // Always receive `true`. Just ignore it
    case Failure(e) =>
      exitExecutor(1, s"Cannot register with driver: $driverUrl", e, notifyDriver = false)
  }(ThreadUtils.sameThread)
}

2、Executor注册机制

在CoarseGrainedExecutorBackend中调用注册RegisterExecutor方法

3、启动task机制

def launchTask(context: ExecutorBackend, taskDescription: TaskDescription): Unit = {
  val tr = new TaskRunner(context, taskDescription)
  runningTasks.put(taskDescription.taskId, tr)
  threadPool.execute(tr)
}

在Executor中launchTask,是调用TaskRunner多线程的。TaskRunner是采用java实现的多线程,并且这里使用了java线程池ThreadPool来管理task.

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ConfigParser模块教程

    配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

    幽鸿
  • Python的module讲解

        Python的目录结构是module>类>方法的,也可以是module里面直接有函数或方法的。一个Python Module(模块),是一个文件,包含了...

    幽鸿
  • 2.2 搜索就是所有

    刚刚情人节过去,也想来一篇数据分析的实例。别黑我,别恶心我。从网上找了一份2000W的数据,粗略处理后,导入MySql,试着看看MySql这2000W数据的效果...

    幽鸿
  • 前端day15-JS(WebApi)学习笔记(三大家族、事件对象、getComputedStyle)

    offsetWidth、offsetHeight、offsetParent、offsetLeft、offsetTop

    帅的一麻皮
  • 独家 | Tableau中的Z-Order了解一下!

    本文将通过三个简单的例子,讲解如何在Tableau中通过颜色图例、字母顺序和国家来控制Z-Order。

    数据派THU
  • 前端之jquery函数库

      jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQu...

    skylark
  • 黑匣子开启:iOS Secure Enclave 固件解密密钥首度“被”公开

    8 月 17 日某黑客发布消息称自己破译出了苹果 iOS 中 Secure Enclave 固件解密密钥。苹果系统向来在安全性上以封闭著称,大家并不能深入地了解...

    FB客服
  • jQuery中的常用内容总结(三)

    上帝
  • 华尔街宫斗戏升温:银行巨头和纽交所争夺交易数据所有权

    大数据文摘
  • 10X Genomics单细胞免疫组库VDJ分析必知必会

    我们生活着的世界并非只有我们自己,而是有很多小于或大于我们的生物不断与我们交互着,有的让我们开心,有的使我们伤心。这就关系到一个本质的问题:

    生信技能树jimmy

扫码关注云+社区

领取腾讯云代金券