Spark——Spark执行流程

Posted Java学习基地Java毕设定制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark——Spark执行流程相关的知识,希望对你有一定的参考价值。

Spark的基本运行流程

一、说明

  1. Spark 应用程序启动在自己的 JVM 进程中,即 Driver 进程。启动后 SparkContext 初始化执行配置和输入数据。SparkContext 启动 DAGScheduler 构造执行的 DAG 图,切分成最小的执行单位:task;

  2. Worker 收到任务后,启动 Executor 进程开始执行任务。Executor 先检查自己是否有 Driver 的执行代码,如果没有,从 Driver 下载执行代码,通过 Java 反射加载后开始执行。

二、图解

Spark(5)——Spark执行流程

三、Spark运行架构特点

  1. 每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。这种Application隔离机制有其优势的,无论是从调度角度看(每个Driver调度它自己的任务),还是从运行角度看(来自不同Application的Task运行在不同的JVM中)。当然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。

  2. Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。

  3. 提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。

  4. Task采用了数据本地性和推测执行的优化机制。

四:Driver 的两种方式

Spark(5)——Spark执行流程

  1. client向ResouceManager申请启动ApplicationMaster,同时在SparkContext初始化中创建DAGScheduler和TaskScheduler

  2. ResouceManager收到请求后,在一台NodeManager中启动第一个Container运行ApplicationMaster

  3. Dirver中的SparkContext初始化完成后与ApplicationMaster建立通讯,ApplicationMaster向ResourceManager申请Application的资源

  4. 一旦ApplicationMaster申请到资源,便与之对应的NodeManager通讯,启动Executor,并把Executor信息反向注册给Dirver

  5. Dirver分发task,并监控Executor的运行状态,负责重试失败的task

  6. 运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己

(2)cluster

yarn-cluster模式中,当用户向yarn提交应用程序后,yarn将分为两阶段运行该应用程序:

第一个阶段是把Spark的Dirver作为一个ApplicationMaster在yarn中启动;

第二个阶段是ApplicationMaster向ResourceManager申请资源,并启动Executor来运行task,同时监控task整个运行流程并重试失败的task;

Yarn-client和Yarn-cluster的区别:

yarn-cluster模式下,Dirver运行在ApplicationMaster中,负责申请资源并监控task运行状态和重试失败的task,当用户提交了作业之后就可以关掉client,作业会继续在yarn中运行;

yarn-client模式下,Dirver运行在本地客户端,client不能离开。

以上是关于Spark——Spark执行流程的主要内容,如果未能解决你的问题,请参考以下文章

spark-sql执行流程分析

Spark执行流程(转)

Spark的任务提交和执行流程详解

Spark的任务提交和执行流程详解

Spark任务提交方式和执行流程

Spark SQL底层执行流程详解