推荐阅读文章列表
前言
如今面试真的越来越卷,不管是校招还是社招,很多同学都开始被问到:你是否看过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
面试话术
在看完源码之后,我们用图示的方式进行一个总结,面试的时候去讲把这个图讲清楚就行了!
-
客户端向Yarn提交应用程序,同时发送请求启动 ApplicationMaster -
RM随机选择一台NM上启动 AM -
AM开启一个用户应用程序的线程,叫做Driver -
Driver启动后,向 RM申请启动 Executor 所需的资源 -
RM返回一批资源足够的NM -
AM在相应的 NM上启动 Executor,内部有一个线程池用来存放task -
Executor 启动后,向 Driver进行反向注册 -
注册完成后,Driver发送task给Executor,进行真正的任务执行计算
写在最后
V6.0笔记获取方式
公众号回复:大数据面试笔记

