00:00
那前面我们看完了一个task的调度部署,对吧?那么接下来我们再深入一层,咱们的task部署完之后,它是怎么执行的呀?啊,这一块咱们也值得去研究研究来,我们接下来是不是一个RPC服务去通知task manager去。告诉他我要提交任务要执行了,对吧,那所以我们接下来一点,他是不是来到网关了,好,那我们CTRL加H找到。它还有一个叫RPC。Task manager getaway,好在这里面呢?是不是又调用了谁呀?是不是我们真正执行的那个东西叫task啊,再调用它的网关,再告诉他我要提交任务,再点又来到接口,在CTRL加H,最终是不是来到task ex这个终端了。
01:02
对不对。没问题吧,好,这是咱们那个上午讲的那个通信嘛,好在这里面呢,我们看几个细节就行了啊,那首先你看这个task它怎么创建的呀,往下往下往下往下。是不是直接溜了呀。对吧,直接另了一个task,那里面封装的各种各样的信息啊,都在这里面,这个task都有。那么再然后呢?再往下。这个task怎么样?是不是启动线程啊啊,他我们说了task战甲执行。Task在哪执行的,在slot上执行的,对吧?啊没办法,那一个task占用多少资源呢?从线程跟内存来讲。
02:03
一个槽的内存量是不是固定的啊,对吧啊,然后有多少你尽管用就是了,那么现成呢。一个task是不是有一个独立的线程啊?没忘吧,啊,所以咱们这边你看是不是task这个线程启动啊。从这里也能看出来,他是不是自己有一个线程啊好,那我们线程启动该看哪里了,有的同学到这可能就你看线程start是吧,啊线程启动再然后呢。到这难道这个可是线程这个类啊,同学们你往后没法追了,怎么追,线程启动之后是不是调用他的run方法呀?对不对啊,所以我们就要找task里面的这个类里面的run方法啊,就就就紧接着就在这了,对吧?啊,那我们看又调用了一个do run,好,那我们再点。
03:05
再往后啊,看一下主要的往后往后往后往后往后,哎呀好长啊好。那这边有一个加载和实例化task的一个代码,你看加载还有实例化可调用对吧,可调用是指什么,是不是就指代码呀,对吧?好,那这边有这个东西有了再往后往后。这个对象是不是直接调用了一个。引爆是吧啊。好。接下来是不是该进来了?又开始调用了,对吧,调用啥呀,点啥也没有CTRL加H。嗯。呃,绿色不要看这么多绿色的多对吧,咱们只看白色的,这个叫什么data source task,也就是说这个task是不是指source算子的一个子任路啊。
04:07
对不对,是不是sources那个阶段呢?那咱们当然sources这就看这,那么其他转换算子看哪里呢?啊,这个是批处理模式的task对吧?好,这个他们也不会看这个呢。是不是一般的硫算子的task在这里啊?比如说map flat map Fiat sun这种是不是应该都在这里啊,对吧,那再往上看,还有什么think是不是也是一个特殊的,对吧?啊,SS都是独立出来的,那么这个是可迭代的,什么同步的think task啊,这就是think的一种特殊实现,是同步的啊,是同步的可迭代就一个一个。执行对吧?啊,就像那个人物说的,想挑战的排好队一个一个来,对不对啊,一个一个来,所以我们说是同步的嘛,好啊无所谓了,所以整体是不是分为source的task,还有全是的task,还有呢,S的task是不是这三类啊,那咱们通用性的,咱们来看你个。
05:15
转换的吧,纯属缝相关的算子,比如说最简单的map,哎,咱们以map为例,那我们应该看stream task里面的什么呢?VO方法对吧,好VO。是不是进入到string task,大家注意我这边为什么进这个,我是不是以map这个扇子为例啊,啊,以这个扇子为例来看的啊好,那这边呢。Before是不是调用前的一些工作呀,该初始化的初始化,该封装的封装,对吧,好再往后。这一步执行邮箱回还什么意思啊?
06:03
他就这个就是它主要的执行逻辑,那不信你往后看是没其他的了啊,这里是一些清空这里呢。运调用之后的一些动作对吧,好,所以核心逻辑在这里面点。邮箱处理器。调用了一个。执行油箱回环对吧,这个路口是什么环状物对吧,说白了咱们油箱。是不是可以存啊,存邮件啊,那我们是不是一个一邮件遍历出来,一个一个处理啊,啊一个一个来啊,那我们往里看点。如果邮箱,呃,你看这边是不是写了一个循环啊。Is,什么什么running,是不是判断它是否在执行啊,它是一个布尔类型的对吧?啊,如果在执行中,也就是说这里面是不是有邮件啊,那他就会进入这个循环,一个一个去弄它,对吧,弄它处理它啊又做了一次判断是否在执行啊,再确认一下对吧,然后呢。
07:12
Run default action是不是执行一个默认的操作呀?也就是说,你。打开一封邮件,你要对他做什么处理?默认有一个动作,这边传了一个default contest。那默认操作是啥呀,点。这是一个接口,找CTRL加群。那其实我们该看到一个白色的这个对吧,最后一个stream task里面。哎,你看。居然是这里。是不是对一个邮箱处理器做了个赋值啊,他是不是new了一个这个东西啊,诶然后呢,传了三个参数啊,来我截个图啊。
08:00
来点进这个构造器。你看他第一个参数叫什么名字。邮箱的默认操作,也就是说这个参数是不是就是代表了默认操作呀。也就是说默认操作是什么呀?Process input,所以我们接下来找什么。Process input啊好,回到task找谁呀,找这个方法一点,哎,过来了。啊,这边也算是层层调用吧,好吧,层层调用,呃,那我们看这个输入处理器调用的一个。处理输入对吧,啊,再往里点。一个接口,CTRL加H。找谁?三个白色的。这个是不是两个输入啊,这个是多个输入啊,是不是不止两个,这个是。
09:02
单输入啊,那对于map来讲,它是。我们先看一个单输入对吧,好。单输入进来,我们发现它调用了一个it是什么意思啊,发射对吧,发射下一个。发射到output去,好。我看看他咋发射对吧点。肯做,将来取找谁?来,都给你们点开。那肯定我们map肯定是不是source啊,对不对,这个不要,那肯定是string task的一个输入,那这里面呢。那中间这两个肯定不是吧,呃,什么排序排序,那第一个有可能吧。那这个呢,一个是S,一个是network,咱们还记得数据传输主要靠什么。
10:04
网络传输,所以我们应该要找网络传输的啊。好。在这里面it next,然后呢,在这里面。做了个判断,然后呢,这个方法名熟不熟悉啊。是不是很熟的这个方法名啊,Process element是不是process function,很多时候有时候会叫这个名字啊,处理方法啊,好,再往里走。他怎么处理的呢?如果他是一条数据。诶,你看这边呃,可以联系咱们学过的知识,如果是一个数据就走,这那其他的是什么,如果是一个什么。水印的数据我们说了,水印是不是一个特殊的数据插入到流里面对吧,它也是在流里流动的啊,从这咱们也可以知道一二,还有什么。
11:02
是否是迟到的对吧,还有什么是否是流的状态,这是其他的东西啊,其他东西那它只支持这些了,没有其他值,那我们现在是不是看这个数据的好,那么点又来到一个。接口看谁呀,然后把它点开。把这个点开。呃。这个sorting肯定不是对吧,Mountain也不是,哎,那这个是不是。In呢,对吧,在这个类里面,我们看in后面的什么multi multi不是source也不是,两个输入也不是,那其实只能是这个。好找他。最终呢,Operator?
12:00
调用了什么?然后呢,把数据传进来。Process element,诶,大家还记得咱们的分层API吗?最底层是什么?是不是就是process是吧?那在上一层是什么?Data string API data set API,我们刚才这个map是不是属于data stream API啊,那目前我们已经能感受到它底层是不是一个process啊?对不对啊。好,Opator算子调用process的点。又该找谁呢?如果是map,哎。诶。看到y input就行了,对吧,这个接口再找实线有什么竟然如此的多对吧?好,这这么多是为什么这么多呀,算子多,每个算子对应一个operator啊,比如说。
13:07
比如说这个,大家觉得这个是啥。是不是map和扇子对应的呀?啊,那你再看这是不是性对应的啊。还有think operator,还有什么cp operator,还有窗口相关的什么window operator,一些算子的逻辑就定义在里边,同学们定义在里边,那咱们现在是不是以map为例啊,看一下string map。你看啊。Element是数据对吧,一条数据replace。是不是这条数据用什么替换呢?把它替换成什么?有了function,这指什么?是不是用户定义的函数啊?咱们定义的什么函数吗?Map里面咱们是不是要去传一个map function,还记不记得这个map function是不是我们自己实现的呀?
14:02
哎,这个就是对应的这个东西点map,我们这个里面函数类里面是不是要重写一个map方法。哎,这个就是指的map方法,然后呢,把元素的这条数据的值是不是当成参数传进来,然后经过map方法的处理。是不是就出来了。这里就是最终体现出来之后,他怎么走啊。通过采集器往下游发送,是不是,那整个流程是不是串起来了,对吧,这个就是我们详细的一个执行过程啊,这个跳转几十次有吧,十几次。哎,那么有兴趣你可以也可以看看其他的算子,对吧,咱们以map为例给大家看了一眼,底层呢,都是差不多的啊,差不多这个就是task被部署之后怎么执行的,怎么处理数据啊。
我来说两句