0
点赞
收藏
分享

微信扫一扫

GitHub加速访问最简单的方法

就是耍帅 03-26 15:00 阅读 2

Spark Executor

什么是Executor

Executor是spark任务(task)的执行单元,运行在worker上,但是不等同于worker,实际上它是一组计算资源(cpu核心、memory)的集合。一个worker上的memory、cpu由多个executor共同分摊。

负责执行分配给它的Task。executor会存在于整个application生命周期。task执行完之后executor就会把结果发送给驱动程序。如果application代码里调用RDD的缓存函数,如cache()或者persist(),executor将会通过Block Manager给Spark RDD提供缓存机制。

spark executor

什么情况下Spark会创建Executor

Spark会在下面3种场景下创建Executor:

  • 当资源管理器用Standalone或者Yarn时,在CoarseGrainedExecutorBackend进程接收到RegisteredExecutor消息时
  • 当资源管理器使用Mesos时
  • MesosExecutorBackend进程被注册的时候。
    在本地模式(local mode)下,当LocalEndpoint被创建的时候。

executor创建成功后,在日志文件会显示如下信息:
INFO Executor: Starting executor ID [executorId] on host [executorHostname]

心跳发送线程

心跳线程是一种常驻内存的线程,说白了就是ScheduledThreadPoolExecutor类的一个实例。可以把这个线程池称为驱动心跳线程池。

运行Task

用下面的方法,可并行执行已序列化的任务serializedTask。

launchTask(context: ExecutorBackend,taskId: Long,attemptNumber: Int,taskName: String,serializedTask: ByteBuffer): Unit

executor执行task

执行launchTask时,通常在其内部会创建一个TaskRunner线程。通过taskId,任务在runningTask里面进行注册。然后在“Executor Task Launch Worker”线程池执行该任务。

“Executor Task Launch Worker”线程池

在Spark Executor启动的时候,“Executor Task Launch Worker”线程池也会随之启动,Executor关闭的这个线程数也会随之关闭。

举报

相关推荐

0 条评论