00:00
好了,同学们,我们接下来来说一下下一个概念,有向无环图G,那什么叫有向无环图呢?首先它是点和线所形成的一个拓扑图形,那么点和点之间用一根线连接起来,并且它有一个方向,这个方向呢,表述的是它的依赖方向,什么叫做依赖?比方说A用到了BA,对吧,那么A用到了B,我们就称之为依赖于B,所以这种依赖关系就形成了一种图形啊,组合成了一种图形,一种拓扑图形啊大家可以看到来比方说来拷贝我们这里有一个A啊,然后呢,我们这里面有一个B,那好,那么我们现在呢,这个A啊,我们的箭头它指向咱们的BA,那这个时候啊,我们就说明用到了BA,依赖于B,那如果再来一个,嗯,好比方说C啊C,那么我们的B,它又依赖于我们的C,所以说这个就是B用到了C,这也是一种我们的依赖关系,所以这种依赖关系就形成了一种我们的几何图。
01:00
形啊,咱们称之为叫拓扑图形,就是这样,那么同样道理,我的B难道不能依赖于D吗?对不对,来放到这边,OK,放到这儿,嗯,好,我们的箭头呢,指向它,所以大家会发现我们这个依赖啊,就是有一个方向啊,有一个方向A老师呀,那如果我们的A和BB和C和D他们有依赖关系,那反过来我的D它能不能依赖于我们的A呢?对吧,反过来反过来以后你依赖于我们的A行不行,我们说不行,为什么不行呢?因为如果要是D依赖于A的话,那么它们之间就形成了一个环状图形,而这种环状图形是有问题的,那咱们举个例子,比方说。咱们maven当中啊,有一个我们叫做什么呢?咱们叫做test啊,一个我们的ven项目,对吧,大家都用过maven,大家都是学过的,好,那我现在有一个maven项目,它现在呢,依赖于另外的一个项目啊,也是个ma项目,所以呢,来我们放过来,比方说它依赖于一个other。
02:00
好了,那我现在的箭头大家想想诶,拿过来,拿过来以后,现在呢,我们的A项目呢,依赖于other项目。那什么叫依赖呢?就是说我们ma呢,会在我们的仓库当中去查找这个项目所打的架包对不对,你的价包我能用上,那我就依赖于你嘛,对吧?也就意味着他要想运行它,必须要等着other打完架包放到仓库里面我才能用,对不对?那好,反过来,如果你的other。它现在反过来要依赖于我们的test了,大家想想这是不是就形成了一种环状图形啊,对不对,形成了一种我们的环状图形,那么这个环状图形就导致什么问题呢?我这个other的项目,它如果想运行的话,必须你的test的项目都打成包,放在我们的仓库当中,对不对?那你要打包的话,那么我们的test它又依赖于other啊,Other需要打包,而other打包呢,需要test打包,这不就形形成个圈了吗?那么这个圈儿跳不出去,这样的话就麻烦了,就跟个死循环一样,对不对?所以这种是有问题的,那么在我们的main当中是不绝对不允许循环依赖的,那么同样道理,咱们在当前的图形当中也不行,如果这样的话,就有可能形成个圈,形成个死循环,它就任务就执行不过去了,所以在我们的程序运行的过程当中,我们需要它有方向,但是不能形成环状图形,这个就叫做有效无环图,那么它的作用是什么?它在我们程序当中起到。
03:34
了什么样作用,其实就是调度,那比方说我有多个任务,那么哪个任务先执行,这个任务执行完了以后该哪个任务执行,他们就通过这种点和线所形成的关联来执行我们的操作,诶这是我们的有效无环图,这个在我们后面讲解的过程当中,我们会详细的去讲,并且我们会看到他的一些源码来解释他们的一些关联。好吧,同学们,咱们先把基本的概念先搞明白啊,其实就是任务的调度,先走哪一个,后走哪一个。
04:04
好,那我们接着呢往下啊,下面呢,有一个叫提交的流程,这个提交的流程呢,其实它主要画的是我们Spark在雅恩当中的一个提交流程,那么这个提交流程呢,大家可以看到它分两条线啊,两条线,那么这两条线是什么意思呢?首先第一个它表述的是我们的资源,这个是我们的计算,因为我们要想去执行咱们的计算任务的话,你得有资源,比方说内存,比方说CPU,还有你是不是得把计算的任务准备好,然后发送给我们的资源来进行计算呢?所以它有两条线,这一条线就是说申请资源,有了资源之后,把那个ex创建好,它就可以准备执行任务,而我们的另外一条线,这另外一条线呢,就是我们自己所写的代码了啊,我们的逻辑,那么这个逻辑到最终就会形成咱们的任务,然后把任务呢,发送给我们的ex,这样的话呢。
05:04
我们就可以执行咱们的计算了,那我现在呢,是把这个图啊,简单的给大家说一下,我们并没有细讲,是因为现在我们还不理解其中的细节和过程,我们需要的是在我们后面的学习当中不断的加深他的讲解,以及后面我们会看源码,所以啊,同学们不要着急啊,我希望你们能够呢,嗯,静下心来啊,踏踏实实的听老师讲啊,不要着急说老师你看这每一步什么意思呀,不要着急,咱们慢慢来,慢慢的深入到我们内核的学习啊,是这样,同学们,这是我们的一个提交流程,记住啊,提交流程分两大块儿,一个是资源的申请,一个是计算的准备,当我们资源准备好了,计算准备好了,你把计算发给我们的资源就可以进行了,啊,就是这个概念啊好。呃,接下来呢,是我们雅恩啊,它的两种部署模式,为什么提到雅恩呢?是因为在我们国内啊,咱们的这个海杜普用的非常多,那么雅恩的资源调度框架用的也会非常多,所以在生产环境当中啊,雅恩和Spark他们一般是结合在一起来完成的,但是呢,我们的雅呢,它一般有两种部署方式,一个叫client,一个叫cluster,这两种部署的方式的区别就在于你driver的程序它运行的节点是哪一个啊,这个咱们还是没有细讲,这个呢,主要是一些文字的描述,当我们后面给大家看过源码之后,你再回过头来看这个文字的描述,会理解的更加深刻,那我们现在先告诉大家一个基本的原则,那么我们的client和cluster他们的核心区别在哪?就在于driver运行的位置,你是在集群的里面运行的,那我们就称之为叫集群模式,如果你是运行在集群之外,我们就称。
06:54
称之为叫兰模式,就是这个区别,咱们后面详细的看啊。
我来说两句