Ⅰ Spark-Submit 源码剖析
SparkSubmit 源码剖析:
SparkSubmit 是 Apache Spark 中用于提交作业到集群的关键工具。其源码逻辑严谨且复杂,主要经历了参数校验、命令构建、执行环境准备及作业启动等阶段。以下是详细的剖析:
参数校验:
- 入口:Main 方法首先进行参数校验,确保用户输入的参数符合规范。
- 方式:通过 checkArgument 方法进行参数的有效性检查。
命令构建:
- 核心类:SparkSubmitCommandBuilder 是构建命令的核心类,它继承自 AbstractCommandBuilder 抽象类。
- 构建过程:
- 参数解析:使用 OptionParser 解析用户输入的参数。
- 命令生成:通过 buildCommand 方法生成具体的提交命令。buildCommand 方法内部调用 buildSparkSubmitCommand 来构建命令列表。
- 命令组成:命令列表包括两部分,一部分是通用参数,另一部分是具体参数,这些参数通过 OptionParser 获取并构建。
执行环境准备:
- 入口:SparkSubmit.scala 中的 doSubmit 方法是执行环境的准备入口。
- 参数解析:使用 SparkSubmitArgumentsParser 解析参数,并生成 SparkSubmitArguments 对象。
- 环境初始化:通过 prepareSubmitEnvironment 方法初始化环境变量,返回一个包含子进程参数、classpath 列表、系统属性 map 和主类名的四元组。
作业启动:
- 执行入口:runMain 方法是作业执行的入口,它接受 SparkSubmitArguments 作为参数。
- 主类加载:通过类加载器加载主类,并处理可能的异常。
- 应用生成与启动:根据主类生成 SparkApplication 对象,并调用其 start 方法启动作业。
总结:SparkSubmit 的源码逻辑清晰,从参数校验到命令构建,再到执行环境准备和作业启动,每一步都经过精心设计。通过对源码的剖析,我们可以更深入地理解 Spark 作业提交的过程,从而在实际应用中更好地使用和优化 Spark。