00:00
那咱们接着提点往下看啊,这一块呢,一些重点的地方我大概标了一下啊,那主要就是这里engine.entry这个方法后面就捕获异常了嘛,我们直接点进来啊,废话少说啊,那这些什么参数的一些。呃,判断啊,咱们就不去看了啊,这个跟核心逻辑无关,呃,那再往下走,这边我们可以看到它会加载一个配置文件啊,解析配置。那这里主要有几个啊,一个是咱们自己写的Jason,就是reader writer,咱们天天去写的那玩意儿啊,他肯定要加载的,还有一个是不是co.Jason这个在哪里呢?这个大家应该是不是在空,呃,这套叉目录下面的一个空里面对吧,这个是安装的时候咱们也介绍过了,那里面有一个文件叫做什么呢?叫做core.ja那还有一个各个插件的plug.ja还记得咱们做DB two案例的时候,是不是要添加注册一个驱动啊,是配进入到某个reader或某个writer里边,它有这么一个接了对吧?啊就说白了就加载配置文件知道一下就行了啊,也不点进去看了啊,没什么用。
01:20
呃,那直接拉到最这个方法,最后一行是不是引擎的启动啊,对吧,然后直接点啊,那没用的,我就快速跳过了,呃,也不是没用啊,不是核心逻辑,那在这一块咱们重点看几个东西啊。首先是这。它定义了一个叫container容器,当然不是雅安的容器啊,他做了判断,如果是一个作业,那么就创建一个昼夜容器,如果不是就创建认路组容器,对吧?好,这个你知道一下,那再往下走。最后一行。
02:00
那这边呢。是不是容器就启动了。啊。接下来点进来这边是不是一个抽象类啊,哎,老方法CTRL加H找他的实现,那我们你看有两个实现,一个任务组一个作业,我们现在肯定看的是什么作业层级的啊点进来呃,点进来之后呢。诶,我们刚才是什么方法啊,Start方法对吧,CTRL加F12START。进来,那这一块我已经疯狂的标注了,同学啊,那这一块我要干一个事儿啊,把它截过来。那么在这个方法里面,大家看我标注的啊,这是预处理对吧,这是事后的处理啊,那这中间有几个常规的方法叫什么呢?初始化。预呃,准备工作还有什么呢?切分调度,事后处理啊。
03:05
这个不就对应咱们那张图嘛,对吧,同学们。这张图。你看。初始化。准备。呃,切分。调度。Post。对吧,呃,所以他这个源码呢。写的还是比较整洁的,比较规范,那初始化跟准备工作你想看也可以,对吧,可以看看它。它调用的是什么?Reader的初始化跟write的初始化,呃,不同的插件肯定有不同的初始化,这个我不去看了啊,这个没什么东西,没什么重要逻辑啊,也不是没就嗯,咱们现在还不关关注那个,还有准备工作,可能会做一些清理啊什么的,也是调用插件对应的方法,你看。啊。Reader跟writer这个咱们也不去看了啊,那没什么意义,我们说核心的方法在哪里啊,先分跟什么调度。
04:07
这个是咱们重点要看这张图,我就缩小放一边了啊,那么可以看到文档这边我写的也没有特别多啊,咱们接下来了解一个task的切分逻辑。也就重点看切分啊,那我们快速的跳转一下啊,SP点一下点进来之后发现它调用了啥。嗯。So do。Reader的切分,还有writer的切分,对吧。这这好像也没有什么东西啊。那我们在看这个之前,第一行是咱们要关注的这个叫什么。调整全等数量,这个就是咱们要重点关注的一个事儿啊。
05:03
好来我们点进来,点进来之后啊,咱们看几个事儿啊,呃,那这些什么初始化负初始值,那这些咱们就不去管了啊。这是一些判断啊,好来我们看这它这边有一个什么叫全局的limit。SPSP,还记得咱们在介绍那个Jason文件的时候啊,不是有说过。嗯,我想想我我咱们找个案例吧,啊,找个案例啊,随便找一个,比如说DB two的啊。你看这个Jason文件,我们说主要有三部分,第一部分是什么reader。第二部分呢,Writer第三部分。Setting,那在setting里面是不是有一个速率。和并发的一个控制,这个也是咱们在使用过程中优化要考虑的一些事儿啊,那刚才呢,我们限速我们说了,除了指定并发数还可以指定什么。
06:05
是不是字节数啊,呃,就比如说每秒钟多少K,多少兆多少G对吧?呃,那还可以指定一个什么record。Record是什么数据量?也就是说每秒钟多少条啊?它有三种东西啊。啊,先把这个知识点回忆起来,好,那我们接下来来看啊。这边如果设定的数据条数的限制,那它怎么计算呢?哎,大家注意啊,这个是全局数据速度除以每个channel的速度。也就是说这个东西咱们可以参数来指定,什么参数呢,我们瞅一眼先眼熟一下啊,也有默认值啊。对。这个东西。Job setting speed record。
07:01
这个是不是就应该写在这里啊,同学们。是不是应就应该写在这里,这个是全局的啊,整对啊,全局指的是整个作业啊,这个先留一个印象,那同样的啊,也别同样的那单个。哎,哪去了,看看花眼了啊。啊,那除上每个圈的速率,那这个东西在哪设呢?来找一下。它也有一个配置文件,它在哪里呢。在这里。channel.speed bit,也就是说根据数据量,呃,也就是说它的呃,存储大小吧,存储大小。是在core这个里面配置的,也就是哪一个呢core点啊,这看不清楚啊,也就是说在咱们空里面的core点这个里面我们可以配置每个channel的速度啊,这个大家可以去看一看啊。
08:06
呃,或者我在这看,你看在这里是不是有个call连接上,让大家瞅一眼呗。你看是不是这个。在这一块对吧,Transport channel speed,然后可以指定BY,也可以指定record,默默认呢,它是负一对吧,负一这个是给大家解释一下的一个地方,好,总而言之呢,一句话,如果be指定的,那么全等数怎么确定啊,总的除以每个全拢。对吧,啊没事,这个结论你现在记不住,你大概留个印象,在优化的时候我还会讲这个啊,咱们都有写。那哪一个是可以配的,这个可以配,这个可以配,那上面这个默认多少10万。那下面这个默认负一啊。
09:01
负一就没事了。呃。好,再往下走,这个是指定的字节数,那我们说除了这个还可以指定什么。记录数也就数据条啊,数据条数那它是怎么计算的呢?来我们有三种方式嘛,现在看第二种方式,这个也是什么全局的图上什么单个channel的,那其实同样的道理,全局的在哪设在咱们的job.ja对吧?也就是咱们自己写的那个Jason作业文件在这里面的啊,就在这再看一眼啊,行,大家现在还不熟悉,就你自己写的这里面setting speed这边是可以写的啊。写一个record,好,这个是全局的,那同样的道理。呃,啊,是这对吧,每个channel的限制在哪呢?你可以往上翻。
10:03
呃,我双击它是不是颜色变了啊,你看在这里赋值了。那这个东西点一下。是不是还是core文件里面,还是在这个东西里面啊。我们还是再对比一眼啊,就在这里。Record。也就是说,还是全局除以单个channel好了。现在问题来了,同学们。我能不能两个都写?你看他两个判断是不冲突的呀,我是不是这个地可以走,这个也可以走啊。那问题不就大了吗?那到底以谁为准呢?它变量名可不一样啊,你看。它可不会覆盖啊,这个是BY结尾,这个是record结尾啊,你放心,接下来就一个逻辑了,所以我们需要channel的数量等于多少呢?干嘛在干嘛?
11:01
比大小啊。一小取谁呀?取最小值,也就是说你既设定的数据的数据量限速啊,也设定了数据条数的限速,那么这两个,那我取值比较小的数为准啊,为准啊,那有的同学有疑问呢,你不是说有三种吗?那现在只有两种。那第三种又该怎么办呢?来,往下走。这。是不是直接退出该方法?对吧,它判断如果这个确定好的channel值小于int的最大值,说白了是什么,因为它的初始值是就是它嘛。也就是说,这个东西一旦赋值了,就直接返回。说白了。说白了,咱们直接指定圈,它的优先级是怎么样最低的?
12:02
对吧,它的优先级是最低的啊,你可以三个同时写对吧,但它不生效啊,就这个意思,那再往下走,那如果不返回说明什么,说明这个东西没指定,也就是说。你既没有指定BY,也没有指定record对吧,那接下来就怎么办?就直接读取咱们的配置呗,对吧。读取哪个配置呢,就这。就像咱们现在写其他两个没写,只写了一个圈,那他就以它为准,这个就是咱们对于并发数的一个确定啊。
我来说两句