00:00
咱们前面把咱们的这个流程画完了,接下来呢,我们把课件呢,我们看一看,咱们课件当中啊,咱们这个是Spark内核啊,它所谓的10SPARK内核呢,就是我们10SPARK的内部核心的运行原理里面包含了什么组件的运行机制啊,任务的调度机制,内存管理机制,以及它核心的功能的运行原理啊,这些东西是我们需要去掌握的啊,但是我们也讲了源码嘛,它就是为了方便我们记忆,去跟我们的一些文字的描述做一个对应,没有要求大家把每一段源码都记住,这个是不需要的啊,只要证明我们的原理说的是没有错误的,其实就够了啊。那么我们下面的这个核心组件呀,有两个叫driver,一个叫ex,这个在图形当中我们说过了,咱们driver呢,其实是一个线程,这个线程呢,会反射执行咱们的应用程序的main方法,对吧,而我们的ex呢,有两个,这个ex呢,我们称之为叫做通信的后台,这个ex呢,我们称之为叫做什么,咱们叫。
01:00
计算对象,所以啊,我们一般情况下,我们说e qor呢,其实指的是这个绿色的进程啊,里面的计算对象,它属于内部的一个属性,好了这个呢,我们说到这儿,然后呢,我们回过头来,咱们往下看啊往下看,呃,下面呢,有一个叫通用的运行流程的一个概述,其实这个图其实还总体来讲还是非常不错的,因为它明确的告诉我们当前的流程分了两条线,呃,一条线呢是我们的资源,一条线是我们的计算啊,那么我们这个到最后呢,把计算和资源合二为一来实现我的业务,所以这个总体上来讲是没有什么太大问题的啊,但是呢,这里面有一些细节,咱们稍微看一看啊来,首先第一个这个叫反向注册,当我们去申请资源之后呢,我们的ex启动之后呢,有个反向注射功能,这个反向注射功能呢,恰恰就是我们的什么第七步。因为我们的这个E的这个后台通信的节点呢,它其实是OB不master他来申请启动的,它启动之后呢,再反过来向他进行注册,对不对,所以我们称之为叫反向注册,这是我们的第七步啊,有这么一个概念,那么反向注册的目的是告诉你有哪些资源已经准备好了,诶是这个意思,然后他说了叫资源满足以后呢,会执行论方法,这个地方稍微的有一些不准确,因为从源码的角度来讲,其实啊,它是一个交叉执行的,什么意思啊,咱们在提交的时候啊,其实是有一个叫driver的线程的,对不对,那这个线程当它执行的过程当中,我们其实这边是处于阻塞状态,它处于阻塞状态,然后呢,当我们反射执行main方法之后,去创建Spark contest并完成初始化之后,他会通知他,让他继续执行,那这边处于阻塞状态,然后这边开始执行,他执行以后,当他完成所有的操作之后,这个时候呢。
02:52
再告诉他,让他继续执行是这么一个过程,所以呢,这就意味着我们在当前的这个情况下,其实并不是跟这个图完全一样,但这个图总体上来讲其实问题不大,它体现的是两条分支啊,这个执行的过程啊。
03:08
好了,咱们接着呢往下吧,呃,下面呢,是Spark的一个部署模式啊,部署模式,这个部署模式其实我们之前在给大家讲Spark环境的时候,咱们讲过,那比方说独立部署模式,还有雅恩的这种部署模式,以及S,还有K8S,还有那个叫做嗯,Windows的部署模式啊,咱们多多少少呢都设计了一点啊,那咱们主要讲的呢,其实应该是雅恩的这种模式,这个雅恩的这个模式呢,我们有两种,一个叫集群模式,一个叫客户端模式,一个叫cluster,一个呢叫做我们的兰,那这两个模式它有什么区别呢?其实啊,它区别就区别在于我们的driver运行在什么位置,咱们回过头来,同学们看,在咱们之前的咱们的这个地方,咱们看一下,在咱们的这个地方,我们有一个叫ya cluster obation,咱们这边有一个叫雅n cluster obation,这个是怎么来的呢?还记得吗?同学们,咱们回过头来看一下啊,在咱们给大家之前的源码。
04:09
当中你会发现咱们前面的这个地方有一个叫child men class里面有一个这个叫Yan classlu application,所以啊,我们把这个方法呢,我们去搜索一下来,咱们找一下把这个该关的关掉,关掉以后咱们叫Spark啊,咱们的submit,然后呢,我们给它来搜索一下,在这个地方叫做我们的prepare submit,他们点,呃,点完以后同学们看,就在这个位置啊,我们点,点进去以后,最后的这个地方会返回我们的一个叫child的main class点。点完之后来吧,咱们往后看啊往后看。呃,看看跑哪去了,咱们往上走啊。往上走的话,应该是在我们这个位置有个叫child main class,然后呢,我们往上找,往上找,往上找呢,我们是找到了这个位置叫ya安的cluster,咱们等同于它对不对,但是如果你是一个客户端模式的话,就不是它了吧,对不对,那么所以呢,咱们接着往上往上往上往上以后这个是不对的,这个叫stand的一个cluster,这个肯定不对,咱们接着往上,往上以后往上走,往上走,往上走走到了哪里呢?咱们看这叫做client模式。
05:22
如果你当前的部署模式是client,那这个时候同学们记住了,我们这边就会有一个叫点main class,给它附上值,这是啥东西啊,我们点一下,点完以后搜索一下来搜索,搜索以后同学们观察一下是什么东西啊,什么东西就是那个点一下叫杠杠class,它就等同于把我们的杠杠class在这边执行,你的杠杠class其实不就是这个Spark派或者我们自己的应用程序吗?就意味着如果是客户端模式的话,咱们的那个driver其实是在这儿执行的啊,你会发现如果要是集训模式的话,Driver是在这个位置,但如果是客户端模式的话,咱们这个地方应该是我们的driver,所以我们兰模式和那个cluster集群模式的区别的核心就在于你driver的位置,你的driver是在我们集群之外还是集群之内啊,咱们这里呢,可以把这个图形呢,稍微的咱们换一换啊,咱们稍微换个拷贝。
06:26
拷贝以后呢,咱们往下来啊,咱们往下复制,嗯。呃,好了啊,来往这边放好放过来,放过来以后同学们看啊,就是我这就改一下,咱们叫做client,哎,咱们叫做client,好了,你叫做client之后,那这个地方呢,就应该是我们的driver了,咱们就不画那么多东西了啊,把这个都去掉,那这里呢,我们就画成我们的driver OK,就是它,那如果是这个是driver的情况下,那咱们这个地方应该拷贝了,拷贝过来应该在这儿了,对不对,好放过来放进去啊,那这个呢,我们就不要了。
07:02
嗯,不要了,以后同学们看一下,那这个时候咱们所谓的注册executor,其实是应该告诉咱们的driver对不对啊,说driver我们哪些资源准备好了,同样道理,注册成功呢,应该是driver呢,告诉我们这边注册成功,所以啊,所有跟我们的这个ecuor的通信呢,应该是由我们的这个driver这边来完成的,还有包括一些我们的资源,还包括任务的执行情况,在我们这里呢,都应该是这么来做的啊,所以呢,我们这边你会发现,其实就是把我们的这个driver啊,从我们的集群的内部,哎,放到了集群的外部,这就叫client模式,你把这个记清楚了,其实就够了啊。好了,这个呢,我们文字性的细节,我们不再给大家详细的描述了啊,咱们接着往下,呃,下面这个地方有一个什么呢?咱们叫做啊EXLA,这个是什么意思呢?咱们来回过头,咱们看这个地方啊,把这个去掉,刚才咱们在这边有一个类就是它啊,咱们在这给它搜索一下拷贝。
08:00
拷位以后放过来啊,放过来放过来以后呢,我们点击这个run,这个run之后呢,我们往下走,它这边有一个三密的提交,提交之后有一提交在这个位置,这个位置当中有一个它创建,创建的时候同学们看啊,咱们这样当时啊给大家说这么一件事情,如果是集群模式的话,它走的是application master,那如果不是集群模式的,大家看下这个地方就应该叫excu later,所以我们拷贝,拷贝以后,咱们这个模式当中啊,这个地方的名字也应该稍微的换一换啊,应该改成叫exter,应该就是它了。好了,那如果是我们的这个叫做什么呢?咱们的ECU later的情况下,那我们来看看这跟有啥区别啊,啊,你别到时候区别很大,也不合适,所以呢,放过来咱们打开,打开以后你看它的焖方法怎么了。你会发现所谓的execute later里面的main方法,其实走的就是OB matter的main方法,所以逻辑上有区别吗?同学们没有任何的区别,对不对,只不过呢,细节上有些变化,比方说咱们往下找,往下找当中这边会有一个我们的运行啊,咱们去找一下wrong wrong方法当中,咱们往下走,往下走,往下走,大家看这个地方有一个变化。
09:20
这边叫做run driver,所以呢,点击之后它里面会有一个启动driver的过程,但是呢,当前我们的driver已经在我们的集群之外就准备好了,所以呢,这时候就应该走它了,走它的话点一下你会发现就没有那个driver的现成的概念,所以这边就直接开始什么注册am,然后后面就开始申请资源,完成咱们的操作,所以啊,他的整个操作就有了变化,其实啊,就是把那个driver呢,挪到了我们的之前,放到前面去了,就是这个意思。好了,这个呢,我们就说到这里,咱们有一个大概的对比就可以了,你要知道他们的区别的核心在哪里好了,然后下面呢,是它的运行机制,这个三啊,对于咱们大家来讲呢,其实我们当时讲的也不多啊,所以这个呢,不是我们的重点,你只要了解它的核心组件当中有个master,它类似于咱们的resource manager,叫R,还有他的ER呢,类似于咱们的no manager nm,其实就够了啊,别的其实大同小异,呃,下面呢,有两张图,这张图当中。
10:20
啊,其实也是差不多了啊,也是差不多的,然后呢,接着往下,下面是client模式,把那个driver提到外面来执行了,也是一个道理。
我来说两句