Spark源码

随声附和 提交于 2020-02-25 18:11:02

Spark版本:2.1.x
Spark有许多模式,比如standlone 这里分析Spark on yarn 的部署流程。在这种模式中有几个重要的角色我们列出来。Driver、Executor、AM、NM、RM等,我们将在源码中将这几个组件串联起来,分析在Spark on yarn下这几个组件是如何工作的。

入口

spark-submit 中调用的类为 org.apache.spark.deploy.SparkSubmit 具体分析过程不赘述。
所以我们直接从SparkSubmit 分析,后续的逻辑。

1

% org.apache.spark.deploy.SparkSubmit
%% main
%%% SparkSubmitArguments(args)

进入main方法SparkSubmitArguments(args)进行参数准备,这是一个class对象,当我们使用new SparkSubmitArguments(args)的时候,其中的所有的代码从上至下依次执行。
%% submit(appArgs)
%%% prepareSubmitEnvironment(args)

在这个方法中,返回了方法参数,其中 mainClass代表的参数是org.apache.spark.deploy.yarn.Client
%%% Runmain()
此方法中以开启线程的方式,反射调用了org.apache.spark.deploy.yarn.Client中的main方法
如果我们这么总结的话,SparkSubmit主要职责就是判断、准备我们在客户端提交的参数,如果是spark on yarn 那么会调用 org.apache.spark.deploy.yarn.Client的main方法,这个赋值是可以找到的。
还有一个点,其使用了ClassLoader去加载了jars,他的目的是加载我们指定的依赖到内存当中,否则jvm是不会把我们想要的依赖给自动载入的。

2

% org.apache.spark.deploy.yarn.Client
这个类在spark的源码中是没有的,是因为我们在本地idea开发的时候,并没有使用到它,但是在生产环境中是有的。
%% main
%%% new Clinet.run()
%%%% YarnClient.createYarnClient
此方法中创建了YarnClient用于提交任务,其中拿到了RM的引用(地址、端口等)
%%%%

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!