SparkSubmit进程执行过程
sparksubmit 类main方法中首先讲args封装到了SaprkSubmitArguments 当中。进行参数的初始化。
封装的返回对象appArgs对进行匹配,如果匹配得到的是sunmit那么进行提交作业的操作,如果匹配到的是kill,结束appArgs对应的进程,如果匹配到的是request_status,返回状态信息。
对于匹配到的是submit提交作业的时候,在submit方法中,
首先拿到远端的远程单例对象,只有拿到远程单例对象,才能拿到远程对象的方法。
val proxyUser = UserGroupInformation.createProxyUser(args.proxyUser,UserGroupInformation.getCurrentUser())
然后执行runMain方法,在runMain方法中,首先初始化了入口类
var mainClass: Class[_] = null
然后通过反射获取到入口类
mainClass = Utils.classForName(childMainClass)
拿到入口方法,这里的main方法的名字必须要是"main"因为在获取去入口方法中把这个方法的名字固定成了"main"
val mainMethod = mainClass.getMethod("main", new Array[String](0).getClass)
通过mainMethod调用invoke对main方法进行托管执行。
mainMethod.invoke(null, childArgs.toArray)
接下来就是初始化一些需要的环境,如SparkConf、SparkContext等,然后生成相应的RDD