00:00
来,接下来看最后一个物理执行图。那么其实这一块应该属于什么呢?Task的调度和执行,为什么呢?因为咱们讲什么叫物理执行图啊,它并没有一个类跟它对应对吧?呃,他只是说咱们所谓的task分发调度完开始执行了,那么你全局来考虑它是一个什么样的状态,这样子是一种事后诸葛亮马后炮对吧?是马后炮对吧?那么这一块呢,咱们也可以看一看是在哪个地方,这一块就要涉及到咱们的调度了啊,现在作业图已经有了,是不是要要调度了啊,所以这一块我们也叫task的调度,还有执行,我们分两块,我们先看调度啊。那么还记得job master启动的时候做了几件事吗?啊,可能忘了对吧,那我们看看第一章来,还好,我这边啊分点分的比较细,对吧,那咱们应该找哪个。
01:05
Dispart启动job manager应该起来,你看它里面经过层层调用,调调调调。呃。啊,Start start在START11路start进去,最终咱们是不是进入到这么一个方法里啊,那么里面记得有这两个东西吗?有一个我们是从这里进去看的,对吧?哎,怎么启动的,我们另外一个重置和启动调度器,当时我们就提了一句,说后续再看,没错,接下来咱们就要从这里开始了,为什么呢。为什么从这接着看呢?直行图在哪生成的同学们?Job master构造的时候。是不是创建了一个调度器,调度器里边是不是做了一个转换了,那所以开始调度器开始调度,他目前手头是不是已经有执行图了呀。
02:04
对吧,所以在这边我们是从这里逻辑是接着往后走的啊好,那么首先呢,咱们找到这个地方啊,我也不一步步跳的啊,来直接搜这个方法。诶,直接进入到start job execution,就咱们之前点过的啊,你看这是咱们前面注释的,还记得这个地方重置和启动调度器,好,那么接下来咱们就要从这开始啊。好,再啰嗦一句,这个是哪个地方?哪个地方?Job master job master。好,开始了。点。这里面。这一大坨。呃,那么可能,你看这边又。
03:02
创建的一个调度器,当然前面这些是什么意思啊,判断作业的状态。如果他是create状态。那就设置一下,如果不是create状态,它就怎么样,又是为什么叫重置啊,是不是重新做一遍啊,就是如果重新create,是不是刚才那个逻辑。Create的时候是不是再转换一遍那个执行图啊,这边是其实就什么二次保证嘛,就像你门没关啊,门关了你走一半走到楼楼下,我到底关没关,我再上来确认一下,再关一下,就这样子啊啊所以这一块咱们不去看了啊。这个逻辑跟那个你从这个点进去,跟咱们之前看是一样的啊好,那么在最后一行。是不是一个future?现在看这些future眼不眼熟啊?Future是什么?获取异步的结果对吧。
04:02
那这边这里面就是咱们要执行的动作对不对啊,就获取的是不是这个结果啊,啊,当然这边他没有做处理啊来。是不是乱扔乱,那么就执行list当前对象,然后那么打双冒号写法,这里是不是方法名啊。说白了,是不是调用这个方法好往里走开始调度对吧?这个名字看着就很舒服了,很直白,那么在里面呢,这个schedule NG。再调用一次,开始调度啊。再点。来到街口,肯作家。然后呢?是不是找默认调度器啊,咱们是不是之前创建的默认调度器对不对。诶诶好,不在这里的话,咱们就找。父类base啊,咱们一步步跳过来啊,不要乱啊,虽然刚才那个地方是对的,但我们一步步来,那在这个贝子类里面有这个方法,它又调用了一个。
05:06
Start。诶,点进去。是什么?抽象的,这个时候才是跟作家H去找到他们的默认调度器啊,就多了一个跳转了,好,那说白了还是到这儿对吧?好,那到这儿之后呢。这边有一个东西叫。调度策略诶,大家注意,我前面提到一个概念叫调度什么模式吧?ER还记得吧,我们说流处理模式下默认的模式是E格,对吧?那这边是另一个概念叫策略。那么在我们的新版里面,新版指的是什么?1.12,它默认的调度策略叫pipeline region,局部管道式的调度策略。咱们做一个了解就行,这个名词你记得住就行了,好吧,记得住就行,好,再往下开始标注点接口往后走。
06:10
现在该看哪一个。啊,对吧,现在是策略啊,策略我们说新版是不是这个pipeline region啊,局部的管道,管道式的流水作业啊。大家不要搞混,这里也有一个叫一格的啊,是另一回事啊。好,跳转完你看。他还是比较委婉的,Maybe,可能是调度局部了,对吧?然后呢,再往里走。然后呢?是每个。局部啊,什么叫局部啊?我画一个草图啊,我画一个草图。
07:03
这个是不是一个类似的直行图啊。它所谓的局部管道,这个就是一个局部管道,这个也是一个局部管道,这个管道包含的所有流程吗。没有吧,这个管道包含所有流程吗?没有吧,所以叫它局部的。局部管道啊,大家知道这么一回事就行啊好,那我们接着往后走啊,它是对这些分块的局部是不是做一个循环,挨个去调用这个啊,挨个调用啊好走。那么这里面啊,同学们马上就到了啊。这里面在最后一行有一个分配slot和部署,部署这个名字是我们要记住的。啊,这个名字是动作名字是我们要记住叫部署好往下走。
08:03
有点慢啊,有点慢,那这里面默还是去找默认的调度器啊,默认调度器。好,那在这里面呢啊,他就会去看一下资源有没有啊等等这些对吧?呃,分配一下资源呢,这些,那么最终呢。等待分配完开始什么?部署,哎,咱们现在关注的是部署对吧,好点。那么接下来呢,你看这边就简简单单的算是一行对吧。分配所有的资源,然后呢,开始处理,处理什么呢。相当于说现在资源都准备好了,你是不是要开始干活了,对吧,就像你电脑都买好了,是不是该开始敲代码了,对吧?啊。那开始部署deploy all。点,然后在这里面呢,我们也能看到。
09:00
已分配的槽里面要去处理什么呢?要开始部署了吧,Deploy是部署的意思,开始部署或者处理异常,对吧?你有异常就处理异常,没异常就有部署了点,最后呢,在这里面如果没有抛异常,那么就。安全的部署task对吧,是安全的safe是吧?Safe来点。好了,接下来呢,我们你看我刚才这些跳转都是在默认调度器里面的,那你看它前面呢,通过执行顶点的ID,这个就是咱们那个一个一个的执行图里面一个一个的圈啊,一个一个的圈圈啊。不是外面的大框呢,没有job字眼对吧,这里面的小圈啊,里面的这个黄圈好拿到根据ID获取出这个圈,那是把这个圈部署到对应的位置去啊,之前不是分配好的吗?对吧。
10:02
这里就是它的一个大体的。这个deploy这一步是大家要记住的啊,就是怎么执行啊,叫什么部署对吧,要专业一点说叫部署。根据什么?根据作业图吧,部署谁。是不是部署作业图里面的一个一个的顶点啊,说白了是不是一个操作链之后。的一个task。咱们还记得吧?啊。有点懵,我给你们看还是看图哎。这个不是直行图吗?他部署了就是这么一个一个的小,呃小黄圈对吧,小黄圈这个一个圈就表示一个task,那这些task就被部署到槽上面去了啊去执行了。好点。
11:02
CTRL加取找只有一个默认的执行节点操作。好点,你看是不是又反正就套娃对吧,是谁调用啊。执行顶点调用一个部署的方法来点。当前执行部署是吧,点。啊,一路点一路点再往下。来,再往下。呃,马上了啊,再往下,咱们这一块在700多行,这里七百四左右,你看这边呢,是生成了一个task部署的描述器,这里面大家可以理解成。执行后的一些信息吧,就相当于说可以理解成有点像物理执行图含有的信息的,他这边做了什么事啊,你看from我们不进去看的啊,是不是从这个执行节点它会怎么样。
12:03
他执行节点是不是其实就是跑的task。对吧,是不是对它的映射关系啊。来自于执行节点嘛,好创建描述器,这里面它会把咱们的中间结果分区转化成结果分区啊,也就最后一张图的那些对应关系啊。然后呢,执行的边转换成一个什么。最终是不是一个输入的大门啊,里面是不是有个圈啊。啊,说白了这一块是不是做转换。转换啊,就是咱们这张图。把这个。结果转成分区结果然后呢,把边转成input盖啊就这一块,那么咱们的它从把这个执行节点是不是变成了task。啊,就这三个转换嘛,啊,但我们不能叫他图对吧,只能是一个描述信息啊描述信息。
13:05
呃,那么最终呢,同学们,我们再往下看758行左右啊,但可能我加了注释对吧,那这边还是一个future的类型,去执行一个异步的啊,异步的调用,那这里面你看。这行代码现在能不能看得懂?Task manager的网关。是用来干嘛的?是不是用来调通知task manager去执行一些动作啊,是不是来通知他的,哎,他就在这里通知task manager啊,我要提交task给你的。是不是通过这个给他的呀,好,这个名字大家也记住啊,就这一行啊,通过网关调用提交task。然后呢,这个就是刚才封装的那个信息啊,描述器啊,这个就是了啊。然后设定一个超时时间,因为是不是通过RPC通知他的呀,RPC通知他好了。
14:05
然后。后面是不是就开始执行了呀,啊到这里为止,咱们就对它的调度啊,有了一个一调度过程啊,做了一下介绍啊。
我来说两句