码迷,mamicode.com
首页 > 其他好文 > 详细

Spark核心原理之Executor原理

时间:2017-07-10 16:50:32      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:数组   thread   end   rbac   rac   soft   包括   task   gdrive   

Executor是Spark执行任务的进程,Spark启动Executor过程包括如下步骤:

1)使用Spark-submit提交到集群,Master收到RequesSubmitDriver请求。

2)Master调用scheduler把Driver程序发送到worker端执行。

3)Driver执行时初始化SparkContext,创建AppClient,向Master注册,其中Appclient中实现了内部类ClientEndPoint,和Master进行通信。

4)Master收到注册信息后,完成application注册,调用Scheduler程序,向Worker发送LaunchExecutor请求,其中Scheduler主要有两个作用:完成Driver的调度,将waitingDriver数组中的Drivers发送的到满足运行条件的worker上执行(launchDriver函数);在Worker节点上启动Executor执行Application。

5)Worker启动ExecutorRunner,在ExecutorRunner中启动CoarseCrainedExecutorBackend,在其中创建Executor,完成向Driver注册。

Executor中CachedThreadPool是一个线程池分配线程,任务被分发到Executor中以TaskRunner线程形式申请线程池线程,执行。接下来介绍Executor的创建,分配和启动等关键操作。

Executor创建

上文已讲到Executor创建主要是首先由Scheduler线程启动,Scheduler线程通过调用startExecutorsOnWorkers方法完成,遍历worker选择出所有可用的workers,之后调用scheduleExecutorsOnWorkers进行worker选择,有两种策略:round-robin策略(默认),依次全占策略。分配好worker后调用allocateWorkerResourceToExecutor在worker上分配资源。主要调用launchExecutor,该函数向worker发送启动Executor请求,同时向driver返回新Executor启动信息。

下面转到worker端,worker收到launchExecutor消息后调用LaunchExecutor函数,主要负责创建本地目录,保存目录和appid的映射,创建ExecutorRunner线程,该线程负责下载依赖文件,并启动CoarseGaindExecutorBackend,此进程的启动方式是通过建造者模式,通过CommandUtils的ProcessBuilder创建于一个独立的JVM中,此线程向DriverActor发送registerExecutor信息,收到driverActor回复后创建Executor。

Spark核心原理之Executor原理

标签:数组   thread   end   rbac   rac   soft   包括   task   gdrive   

原文地址:http://www.cnblogs.com/lichongjie/p/7145871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!