Spark程序提交过程初探
背景:最近想去系统吃的看一看sparkCore的源码,一回想发现自己有一点懵 O(∩_∩)O哈哈~ 现在重新找回一下记忆
一句很经典的话“No picture you say a JB” 那我们贯彻这个宗旨,先上一张图,看图说话O(∩_∩)O哈哈~
有问题请直接拍脸上,让我清醒的认识到错误
接下来就是一顿~~:
这里分析的是standalone模式,我们编写好了spark程序,完事之后就要去提交运行(提交过程此处省略,后面再详谈),代码提交了,首先在我们要提交代码的机器上创建一个Driver;我们的Driver进程构建几个组件之后,向Spark集群的Master进行注册Application(就是我们的代码),主要是为了告诉Master,我有一个程序要执行了,你看着给我分配一些资源,用来运行这个程序(提交的时候我们可以指定运行这个程序所需要的资源);Master在接收到这个信息之后,就去找worker啊,看看那些活着的worker,是不是能够满足Application执行所需要的资源啊,找到了满足的,然后就在Worker上启动Executor(关于启动多少个,和我们的需求有关);Executor启动之后,会去找Driver,得让Driver知道我提交的Application要在哪里执行啊;Driver获取到Executor之后就可以开始执行应用程序了,首先构建一个初始的RDD,这样数据就会分不到各个Worker上;然后对我们的程序进行解析(stage的划分,生成Task),然后根据某种规则把Task发送给Executor去执行;这一块我也是有疑问的这个初始的RDD构建什么时候开始的??? 有大神可以指点一下,我自己也会去看一下源码,后面会提到。Executor在接收到Task之后,会开启线程进行执行这些Task(就是对RDD的partition进行各种算子操作),这就是spark代码提交运行的初步理解;