spark 提交到yarn 的具体的步骤
一、
首先,SparkSubmit 首先将命令行的参数进行封装 new SparkSubmitArguments , 之后准备提交环境 prepareSubmitEnvironment,进而运行doRunMain 方法,其方法主要是运行runMain方法,该方法中,加载指定的类,查询指定类中的main方法,并且调用指定类中的静态的main方法 (mainMethod.invoke(null, childArgs.toArray))此处的null 参数,就是说明调用的是这个指定类的静态main方法
其次就是,客户端创建客户端参数 new ClientArguments,通过–class进行封装,给userclass赋予值;接下来,创建RM 连接客户端对象,yarnClient = YarnClient.createYarnClient,
运行run方法,向RM 提交submitApplication,通过start方法启动Yarn客户端,并且创建Container的环境数据createContainerLaunchContext,最后启动应用yarnClient.submitApplication(appContext)
二、
① RM启动AM ,创建 new ApplicationMaster(amArgs, new YarnRMClient),AM 通过run方法中的runDriver 运行Driver,startUserApplication(),获取用户应用程序的main方法userClassLoader.loadClass(args.userClass).getMethod(“main”, classOf[Array[String]]),并且执行用户应用程序 mainMethod.invoke;
② AM 向 RM 注册(申请资源)registerAM,RM 返回可用的资源列表
③ AM 启动容器,容器启动Executor 执行后台
④ 容器向AM 反向注册,AM 创建计算的对象