spark 任务提交到集群执行的流程

2018年12月1日

Spark任务怎么提交到worker集群执行?

Spark 应用程序从编写到提交、执行、输出的整个过程如下图所示,图中描述的步骤如下:

1)         用户使用SparkContext提供的API(常用的有textFile、sequenceFile、runJob、stop等)编写Driver application程序。程序先离线被打成Jar包存储起来等待被加载执行,存储的位置有3种:

  • file: – 绝对路径 file:/ dirver的http file server。executors会从该driver上拉取jar。
  • hdfs:, http:, https:, ftp: -从这些位置拉取
  • local: – 从worke所在 每台机器本地拉取文件,适合于jar包很大的场景

2) Spark 客户端提交SparkSubmit 指令,会创建一个ClientEndpoint对象,该对象负责与Master通信交互,ClientEndpoint向Master发送一个RequestSubmitDriver消息,表示提交用户程序

standalone clusters 部署模式中有2中启动模式:

  • client模式: Driver 与客户端程序在同一个进程中,被客户端进程启动(个人理解就是sparkContext初始化过程在spark client端)
  • cluster模式:Driver 是在worker集群中的某个worker 进程中被启动(sparkcontext初始化在某个worker上完成),下图是cluster模式下Driver的部署示意图:

 

可以使用spark shell 和代码方式调用SparkSubmit 2种方式触发;而且通过 Spark submit方式启动App 应用, app的 jar包会被自动分发到所有的 worker nodes上

SparkSubmit  详细参数参考 https://spark.apache.org/docs/latest/submitting-applications.html

上述2种方式本质上都是启动以SparkSubmit为主类的jvm进程完成SparkContext的初始化;

最终使用SparkConf和SparkContext来初始化用户提交的app program(Jar包):

  •  首先会使用BlockManager和BroadcastManager将任务的Hadoop配置进行广播。
  •  然后由DAGScheduler将任务转换为RDD并组织成DAG,DAG还将被划分为不同的Stage。
  •  最后由TaskScheduler借助ActorSystem将Task任务提交给集群管理器(Cluster/resource  Manager)。

3)   集群管理器(Cluster Manager)收到submit请求后(RequestSubmitDriver消息),注册相关driver到driver 队列,然后根据该driver所需资源分配worker,调用worker RpcEndPointRef向Worker发送LaunchDriver消息告诉worker启动该driver,driver会创建SparkContext对象

4)   worker创建好Executor后,Executor将信息发送给Driver

5)   SparkContext的 TaskScheduler将Task任务发送给指定Executor,进行任务计算

6) 将Task计算结果返回Driver,Spark任务计算完毕,一系列处理关闭Spark任务。

主要的流程如下所示:

 

 

 

 

 

没有评论

发表评论

邮箱地址不会被公开。 必填项已用*标注