开发者社区> 问答> 正文

SparkSubmit类的流程是怎样的?

SparkSubmit类的流程是怎样的?

展开
收起
游客fbdr25iajcjto 2021-12-12 23:34:36 2437 0
1 条回答
写回答
取消 提交回答
  • 1.SparkSubmit在main()方法中执行,然后根据提交的类型调用相应的方法,这里是"Submit",调用submit()方法,submit()里面进行一些判断后,使用反射Class.forName(childMainClass, true, loader),然后调用invoke()方法来调用程序员自己写的类,我们这里是WordCount。

    2.在WordCount类中,main()方法里有调用SparkContext,SparkContext构造器使用createSparkEnv()方法,这个方法使用SparkEnv.createDriverEnv(conf, isLocal, listenerBus)方法创建SparkEnv对象;在SparkEnv类,调用create()方法来进行创建SparkEnv,在这个方法内部,有一个AkkaUtils.createActorSystem(actorSystemName, hostname, port, conf, securityManager)的调用过程,主要用来产生Akka中的ActorSystem以及得到绑定的端口号。

    3.在创建SparkEnv对象后,SparkContext构造器使用代码SparkContext.createTaskScheduler(this, master)创建TaskScheduler对象,这里根据实际的提交模式来进行创建TaskScheduler对象,提交模式有:local、Mesos、Zookeeper、Simr、Spark,这里模们主要分析Spark集群下的模式;然后还需要创建一个SparkDeploySchedulerBackend对象;在创建TaskScheduler对象调用initialize()方法,这里选择调度模式,主要有两种模式,FIFO和FAIR,默认的调度模式;最后调用taskScheduler的start()方法,里面主要调用SparkDeploySchedulerBackend对象的start()方法,首先调用父类的start()方法产生一个用于和Executor通信的DriverActor对象,然后里面主要创建一个AppClient对象内部有ClientActor类对象,用于Driver和Master进行RPC通信。

    2021-12-12 23:35:31
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载

相关实验场景

更多