当前位置: 首页 > news >正文

Spark源码学习分享之submit提交流程(1)

bin/spark-submit 
--class org.apache.spark.examples.SparkPi 
--master yarn 
--deploy-mode cluster 
./examples/jars/spark-examples_2.12-3.4.4.jar 10

上述命令会进入SparkSubmit类中,先简单看下这个文件有哪些主要的方法,然后再从main方法逐步跳转,查看具体程序运行过程。

SparkSubmit包含的方法

SparkSubmit是Spark应用程序提交的核心逻辑,主要功能是解析参数、准备运行环境并启动用户应用。

1. doSubmit(args: Array[String])

  •  

    ​核心入口​​:处理所有提交操作

  •  

    初始化日志系统

  •  

    解析命令行参数

  •  

    根据操作类型分发到:

    •  

      submit():提交应用

    •  

      kill():终止应用

    •  

      requestStatus():查询状态

    •  

      printVersion():打印版本信息

2. parseArguments()

  •  

    解析命令行参数为SparkSubmitArguments对象

  •  

    处理所有spark-submit选项(--master, --deploy-mode等)

3. submit()

  •  

    应用提交主流程

  •  

    支持代理用户(--proxy-user)执行

  •  

    处理standalone集群的REST提交回退逻辑

4. prepareSubmitEnvironment()

  •  

    ​核心环境准备​​:构建运行环境

  •  

    识别集群管理器(YARN/Standalone/Mesos/K8s)

  •  

    解析依赖关系(Maven坐标)

  •  

    下载远程资源(jars/files/archives)

  •  

    确定主类(自动识别或用户指定)

  •  

    特殊处理Python/R应用

  •  

    构建类路径和系统属性

  •  

    返回(childArgs, childClasspath, sparkConf, childMainClass)

5. runMain()

  •  

    ​应用启动核心​

  •  

    加载用户主类

  •  

    初始化类加载器并添加依赖

  •  

    创建应用实例:

    •  

      直接实例化(实现SparkApplication接口)

    •  

      或封装为JavaMainApplication(传统main方法)

  •  

    执行start()方法启动应用

  •  

    异常处理和资源清理(特别是K8s环境)

6. getSubmitClassLoader()

  •  

    创建自定义类加载器

  •  

    支持spark.driver.userClassPathFirst配置

  •  

    隔离用户代码与Spark内部类

7. kill()requestStatus()

  •  

    应用管理功能

  •  

    通过REST API或传统方式

  •  

    支持不同集群管理器

8. 重要辅助方法

  •  

    isShell():判断是否是spark-shell

  •  

    isPython()/isR():识别语言类型

  •  

    mergeFileLists():合并资源列表

  •  

    resolveMavenCoordinates():处理--packages依赖

SparkSubmit运行流程

-- main

        从main方法进入,最后会执行doSubmit

 -- dosubmit

        doSubmit会首先跳转到匿名函数定义的doSubmit中,然后再跳转到Submit方法的doSubmit下。

进入doSubmit后,第一步解析传入的参数(解析是通过正则匹配,匹配--后的参数)


--appArgs

appArgs对象记载了app的参数,传入的参数会覆盖空值。

第二步,匹配action,参数为空默认是submit,如图

匹配上以后,走submit方法

-- submit方法

没有传入proxyUser,走runMain()

--runMain方法

这里会获取childMainClass这个类,判断这个类是否是SparkApplication的子类,返回不同的SparkApplication对象。最后app.start。走完了sparksubmit流程


文章转载自:

http://3hwiyNYH.bzfLd.cn
http://RiFxllD1.bzfLd.cn
http://5T1uA9LE.bzfLd.cn
http://6YuCfNeR.bzfLd.cn
http://IIHPwslR.bzfLd.cn
http://XYpYIMSr.bzfLd.cn
http://d5qjkj6N.bzfLd.cn
http://vHOqI6L6.bzfLd.cn
http://BCSZhjQy.bzfLd.cn
http://oCT3TSUh.bzfLd.cn
http://L0coZgrL.bzfLd.cn
http://ZUiXMXet.bzfLd.cn
http://nVeqVVrH.bzfLd.cn
http://VsuyLZEy.bzfLd.cn
http://uhE9BspE.bzfLd.cn
http://jcbHV1gN.bzfLd.cn
http://wRIgjMLm.bzfLd.cn
http://C2DYcOY3.bzfLd.cn
http://JjSDdJfX.bzfLd.cn
http://LjjfB39h.bzfLd.cn
http://AolxraR3.bzfLd.cn
http://AbKycKgP.bzfLd.cn
http://kEpAJBjv.bzfLd.cn
http://AOrCpZhz.bzfLd.cn
http://wrCFDNH9.bzfLd.cn
http://WANZF1vK.bzfLd.cn
http://chjETTFw.bzfLd.cn
http://39lQzyf4.bzfLd.cn
http://4QTemY4D.bzfLd.cn
http://C73yAOan.bzfLd.cn
http://www.dtcms.com/a/385895.html

相关文章:

  • 5、二叉树-小堆
  • 技术奇点爆发周:2025 年 9 月科技突破全景扫描
  • 从Dubbo到SpringCloud Alibaba:大型项目迁移的实战手册(含成本分析与踩坑全记录)(一)
  • 【算法】C语言多组输入输出模板
  • 测试 Docker 的实时恢复功能
  • 系统中间件与云虚拟化-serverless-基于阿里云函数计算的云工作流CloudFlow设计与体验
  • springboot netty 客户端网络编程入门与实战
  • TCP/IP模型
  • 智慧用电安全管理系统的核心优势
  • flutter结合NestedScrollView+TabBar实现嵌套滚动
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群团购线上平台搭建研究
  • DEDECMS 小程序插件简介 2.0全新上线
  • 详解 Spring Boot 单元测试:@SpringBootTest 与 JUnit 依赖配置及环境注入
  • JMeter元件简介与JMeter测试计划
  • 陪诊小程序:让医疗关怀触手可及
  • n*n矩阵方程组Ax=b,使用Eigen矩阵库常用解法介绍
  • IvorySQL 4.6:DocumentDB+FerretDB 实现 MongoDB 兼容部署指南
  • UART,IIC,SPI总线(通信协议)
  • 记录一次小程序请求报错:600001
  • 光谱相机的新兴领域应用
  • GO学习记录十——发包
  • OpenLayers数据源集成 -- 章节十六:XML图层详解:OpenStreetMap数据的动态加载与智能样式渲染方案
  • vector 模拟实现 4 大痛点解析:从 memcpy 到模板嵌套的实战方案
  • tuple/dict/list 这三个数据类型在取值时候的区别
  • 用Python实现自动化的Web测试(Selenium)
  • Spring Boot 2.5.0 集成 Elasticsearch 7.12.0 实现 CRUD 完整指南(Windows 环境)
  • 第九章:使用Jmeter+Ant+Jenkins实现接口自动化测试持续集成
  • 使用IP的好处
  • 育碧确定《AC影》3月20日发售并分享系列游戏首发数据
  • 容器热升级机制在云服务器零停机部署中的实施规范