大数跨境
0
0

【大数据源码解读系列】Spark基于Yarn提交任务流程

【大数据源码解读系列】Spark基于Yarn提交任务流程 三石大数据
2025-11-11
0

推荐阅读文章列表

2025最新大数据开发面试笔记V7.0——试读

简历指导套餐4.0——对标大厂的PB级数仓项目

没有实习经历,还有机会进大厂吗

前言

如今面试真的越来越卷,不管是校招还是社招,很多同学都开始被问到:你是否看过xx框架的源码,诸如此类的问题非常多,如果你回答:我没有看过,面试结果可想而知~

有些同学也知道要看源码,但是无从下手,不知道该看哪些源码,看到源码晦涩难懂,不知道哪些是重点

针对大家的问题,最近我会出一系列跟大数据源码解读相关的文章,一方面帮助大家提升自己,另一方面帮助大家吊打面试官

今天主要跟大家聊聊Spark框架中非常重要的一个源码——Spark基于Yarn提交任务的流程

源码解析

说到spark提交任务,你们一定熟知以下命令

// 基于client模式
bin/spark-submit \
  --master yarn \
  --deploy-mode client \
  --class $MAIN_CLASS \
  $JAR_FILE

// 基于cluster模式
bin/spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --class $MAIN_CLASS \
  $JAR_FILE

以cluster模式为例,我们就随着这个命令,进入到spark的源码世界~

首先找到程序的入口类,就是 org.apache.spark.deploy.SparkSubmit

从这个类进入,沿着以下核心链路阅读源码,基本上就会比较清晰了

SparkSubmit类 -> main方法 -> doSubmit方法 -> submit方法 -> runMain方法 -> SparkApplication类 -> start方法-> YarnClusterApplication类 -> run方法 -> submitApplication方法 -> createContainerLaunchContext方法 ->  ApplicationMaster -> main方法 ->  run方法 -> runDriver方法 -> startUserApplication方法 -> createAllocator方法 -> ExecutorRunnable类 -> launchContextDebugInfo方法 -> prepareCommand方法 ->  YarnCoarseGrainedExecutorBackend类 -> main方法 -> run方法 -> CoarseGrainedExecutorBackend类 -> Executor类 -> threadPool

面试话术

在看完源码之后,我们用图示的方式进行一个总结,面试的时候去讲把这个图讲清楚就行了!

  1. 客户端向Yarn提交应用程序,同时发送请求启动 ApplicationMaster
  2. RM随机选择一台NM上启动 AM
  3. AM开启一个用户应用程序的线程,叫做Driver
  4. Driver启动后,向 RM申请启动 Executor 所需的资源
  5. RM返回一批资源足够的NM
  6. AM在相应的 NM上启动 Executor,内部有一个线程池用来存放task
  7. Executor 启动后,向 Driver进行反向注册
  8. 注册完成后,Driver发送task给Executor,进行真正的任务执行计算

写在最后

V6.0笔记获取方式

公众号回复:大数据面试笔记

【声明】内容源于网络
0
0
三石大数据
专注于大数据开发相关技术以及面试经验分享
内容 205
粉丝 0
三石大数据 专注于大数据开发相关技术以及面试经验分享
总阅读10
粉丝0
内容205