在Spark on YARN模式下,整个执行过程步骤:
Driver Application启动
Driver Application启动:用户提交的Spark Application在YARN上启动一个ApplicationMaster(即Driver Application)进程来管理整个应用程序的生命周期,并向ResourceManager请求资源。
获得资源
Driver Application向ResourceManager请求可用的资源(CPU核数、内存等),并等待接收到资源的响应。
启动Executor Container
一旦Driver Application获得了足够的资源,它会将这些资源划分为多个容器(Containers),每个容器都是一个独立的YARN任务,负责运行一个Spark Executor进程。然后,Driver Application会将每个容器的启动命令发送给NodeManager,让其启动容器。
Executor进程启动
NodeManager接收到Driver Application发送的启动命令后,会启动Executor容器进程,并将Executor启动命令传递给该进程。此时,Executor进程会调用YarnCoarseGrainedExecutorBackend的onStart()方法,初始化ExecutorBackend,并启动ActorSystem和Actor。
Executor注册
在Executor容器进程启动后,Executor会向Driver Application报告其注册信息,包括Executor ID、主机名、端口号等。Driver Application会记录每个Executor的信息,并将任务分配给它们。
接收任务
Driver Application向Executor发送需要执行的Spark任务,每个任务都是一个RDD上的操作序列。
任务执行
Executor收到任务后,在自己的线程池中执行,通过调用RDD的一些计算方法来计算数据并将结果返回给Driver Application。
报告状态
在任务运行期间,Executor会定期向Driver Application报告当前的状态,例如已完成的任务数、失败的任务数等。
完成任务
当一个Executor完成所有分配给它的任务后,它会向Driver Application发送完成消息,并终止自身进程。
应用程序完成
当所有的Executor都完成了任务,Driver Application会向ResourceManager释放其占用的资源,并关闭自身进程。
Spark on YARN模式下YarnCoarseGrainedExecutorBackend的Executor backend
它负责启动和管理运行在YARN上的Spark Executor进程,并与Driver进程进行通信以接收任务并报告状态。
YarnCoarseGrainedExecutorBackend实现了CoarseGrainedExecutorBackend特质,该特质定义了Executor backend必须实现的方法。其中最重要的方法是onStart(),该方法在Executor进程启动时调用并初始化ExecutorBackend。在onStart()方法中,YarnCoarseGrainedExecutorBackend会创建一个Akka ActorSystem并启动一个Actor来处理从Driver进程发送的任务和命令。Executor进程还会向ResourceManager请求资源,并在获取资源后启动Executor容器进程。
在YarnCoarseGrainedExecutorBackend中,有几个关键类需要注意:
-
YarnAllocator:负责向ResourceManager请求资源并为Executor分配资源;
-
CoarseGrainedExecutorBackendActor:具体的Actor实现,用于处理从Driver进程发送来的消息和命令;
-
YarnContainerLauncher:负责启动和监视Executor容器进程的生命周期;
-
YarnCoarseGrainedExecutorBackendUtils:包含一些常见方法,例如解析Executor参数、设置环境变量等。
总体来说,YarnCoarseGrainedExecutorBackend的工作流程如下:
-
调用onStart()方法初始化ExecutorBackend,并启动ActorSystem和Actor。
-
向ResourceManager请求资源并启动Executor容器进程。
-
Executor容器进程启动后,向Driver进程报告Executor的注册信息。
-
接收从Driver进程发送来的任务和命令,并在Actor中处理。
-
在任务运行期间定期向Driver进程汇报当前的状态,例如已完成的任务数、失败的任务数等。
-
当所有任务完成时,向Driver进程发送消息并终止Executor进程。文章来源:https://www.toymoban.com/news/detail-428368.html
需要注意的是,YarnCoarseGrainedExecutorBackend的实现相对复杂,需要深入理解Spark和YARN的相关知识才能全面理解其源码。文章来源地址https://www.toymoban.com/news/detail-428368.html
到了这里,关于Spark on Yarn模式下执行过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!