Spark源码解析(一):运行架构

本文详细解析了Spark在Yarn模式下的运行架构,包括client和cluster模式。从SparkSubmit开始,探讨了脚本提交流程,重点分析了yarn-client模式下ApplicationMaster的创建、Executor的启动,以及Executor的注册与任务执行过程。同时,对比了yarn-client和yarn-cluster模式的区别。
摘要由CSDN通过智能技术生成

1 总体介绍

本文基于spark2.1.0版本的源码讲解
Spark的运行模式多种多样,灵活多变,部署在单机上时,既可以用本地模式运行,也可以用伪分布模式运行,而当以分布式集群的方式部署时,也有众多的运行模式可供选择,这取决于集群的实际情况,底层的资源调度即可以依赖外部资源调度框架,也可以使用Spark内建的Standalone 模式。对于外部资源调度框架的支持,主要以Yarn进行讲解。

  • 单机:local模式、local-cluster(伪分布式)
  • 集群:根据是否依赖外部调度框架又分为两大类
  • Spark内建:Standalone模式,又分为client和cluster两种部署模式
  • 外部调度框架:Mesos模式,yarn模式等,其中yarn又分为client模式和cluster模式

Spark内核架构中重要的组件包括:Application,SparkSubmit,Driver,Master,Worker,SparkContext,Executor,Job,Task,DAG等。
spark程序中各个角色的作用:

  • ApplicationMaster:向集群管理器ResourceManager(yarn模式下)注册并且申请资源
  • SparkContext:是整个spark应用的上下文,也整个spark应用的生命周期
    1、加载配置文件SparkConf,创建SparkEnv,创建TaskScheduler、DAGScheduler
    2、用于创建RDD、累加器、广播变量,获取应用的当前状态等
  • Driver:spark应用的驱动程序,执行用户main方法,创建sparkConext
  • Executor:执行具体任务的进程

在这里插入图片描述
注意:在standalone模式下,Spark有显示创建Driver(DriverInfo),Master,Work
类,事实上在基于Yarn模式下,并没有Master,在client模式下是ExecutorLauncher,cluster模式下是ApplicationMaster来充当Master实现资源调度。也没有Worker,而是CoarseGrainedExecutorBackend进程,在这个进程中会注册Executor,只是习惯称Executor运行的节点是Worker。同样,我们称SparkContext的初始化地方叫做Driver。

2 脚本提交流程

当我运行下图这样一个脚本时,通过spark-submit提交应用,它是怎么执行到我们写的代码的呢?
在这里插入图片描述
spark-submit脚本位于[SPARK_HOME]/bin目录下,内容如下(注意org.apache.spark.deploy.SparkSubmit这个参数,其实它才是任务提交的真正入口):
在这里插入图片描述
实际它执行了spark-class脚本,里面有这样一段代码:
在这里插入图片描述
其实是启动了org.apache.spark.launcher.Main这个主类。
在这个类的main方法中会去初始化SparkSubmitCommandBuilder,然后调用buildSparkSubmitCommand()方法生成cmd命令,其实就是生成了一个java脚本。
在这里插入图片描述
这些命令传回spark-class脚本,通过exec命令执行:
在这里插入图片描述
其实就是又启动了一个java进程,主类就是前面传入的参数org.apache.spark.deploy.SparkSubmit

SparkSubmit类的作用:它是启动Spark应用程序的主网关,该程序处理Spark依赖项的类路径的设置,并在Spark支持的不同集群管理器和部署模式上提供一个统一控制层。

接下来开始执行SparkSubmit的main方法,它会初始化一个SparkSubmitArguments类,对提交的参数进行解析、封装、校验,然后调用submit方法开始提交应用
在这里插入图片描述
重点看prepareSubmitEnvironment()方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里尤其要注意的是mainClass的变化,这决定着不同的模式有不同的初始化方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
prepareSubmitEnvironment()执行完后,调用runMain()方法提交
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值