00:02
好,那经过我们的分析,我们是不是用卡普卡channel的这个结构,哎,用卡卡channel的这个结构啊,比较适合我们当前的这些需求啊,哎,把文件当中的数据读出来,写入到卡不卡啊,只写一个body,那好,那接下来我们就要配置这么一个flow,那来吧,说到flow的配置,哎,总共分几步啊。啊,说到flu配置来啊,首先我给他一个语言,哎,说到配置啊,大家应该在脑海里形成这么一个结构,那第一个叫做。呃,定义组件第二配置so。Us配置thousand是第二个,配置菜是第三个,配置think是第五第四个啊配置S斯第五个组装,那好了,但对于我们这个卡普卡才诺的结构啊,对于我们这个弗罗姆agent的结构,你看我们有think吗?是不是没有啊哎,所以说配置think这一波我们就要省略了啊好,那接下来我们看一看这个该如何定义呢?那来呗,来到文档当中,首先south啊,先定义组件,先定义组件啊啊A1第二一个啊S。
01:39
SOS点一个source等于一个。A1.1个菜四等于一个C1啊,OK,哎,才四啊,好,那来吧,接下来我们先配置SA1.1个S点一个R1R1啊。
02:10
啊,S,我们看一看啊,上次我们用的是谁呀,TDR啊。太有D啊S这呢啊,你看那来吧,太有DS配哪个呀?哎,黑色字体啊黑色字体那t Di source我们配置哪些参数呢?首先啊,它配置了一个channel,那这个channel是给谁用的呢?啊,它是给组装用的啊,什么意思呢?代表我们的这个t DR source啊,要把数据发往哪一个channel啊,那发送给哪一个菜呢?我们是不是只有一个Z1啊啊。那第二个呢,你看我们给他一个type类型,Type类型是TD,它点二一个TYP等于T点好,那再来,接下来我们要给它一个fair group s啊fair group斯,那在这我们给它起一个fair group斯的名字啊,等于一个谁呀,等于一个F1,那如果说我们想设置多个组,我是不是可以再来一个F2啊好一个F1就OK了,那接下来我再来一个file groups,点一个file group内文件组的名字啊,文件组里文件的名字了啊这回事好啊,进来进来之后,那这个文件组的名字是谁呢?哎,Fe指定一个文件组的名字,那我这个组里边。
03:48
我最终我要配置一个什么呀?哎,我监控哪一个文件的目录吧,啊,那对于我们来说,我们监控的是哪一个目录啊,是不是杠op-model杠谁呀?哎,杠一个APP log下面的log吧,那我们监控的是不是所有的。
04:11
呃,APP点星啊,所有的以APP开头的这个文件,哎,因为我们的文件夹啊,我们当前这个文件夹的文件,它是以日期来进行滚动的嘛,所有的都是以APP点为开头的,那么我们就要怎么监控啊,好,那这个完事了,我们看看还有哪个参数啊,我们这儿还要设置一个position file,这是干嘛的呀,这个是设置我们的。断点续传的位置的,哎,我们说它有D,它支持断点续传,那么我们就要设置一个断点续传这个文件的保存的位置好了,那这个呢,我从文档当中,哎,我给它粘贴过来啊好。给它粘贴过来,嗯,配置这呢。
05:04
嗯,断点续传,诶这个好,CTRLC给它拿过来,OK ctrl v粘贴好了,那source到这我们就配置完了,那配置完source,接下来我们配置一下channel,那channel我们用的是谁呀?啊,先CTRLC拿过来,TL,第二一个C,嗯,第二一个TYT,嗯,第一个肯定是类型吧,啊,我们看看啊柴我们用的叫做卡不卡柴,So sooo,哎,这呢卡瓦,那我们看一看卡普卡channel,诶,它第一个是一个type type的类型在这呢,你看怎么查一个卡卡channel的全类名CR away拿过来,好,那再来我们看第二个。卡夫卡boot server啊,那这个呢,我们也给他拿过来。
06:05
CTRLC什么意思呢?意思是告诉我们往哪一个卡夫卡集群写数据啊好,那来吧,我们看看我们的卡巴集群是啥呀,哎,我直接拿过来了啊啊,你看哈布和1029092 1039092啊,你带一个104也行,CTRL位粘贴OK,那完事之后我往卡瓦集群写数据,我要知道我写入到哪一个topic当中呢,所以说我还得配置一个,你看我们在这啊,还要配置一个,哎,Topic。哎,你看诶这些topic我们可以不配,可以不配,那不配它怎么的呀,它会给我们发送到一个默认的topic当中,但我们不想用它啊,我们呢,想用一个我们自己的topic,诶带业务逻辑的这topic啊,你看啊卡topic那等于一个什么呢?注意这个地方,你看它不是TOPIC4了。
07:10
它是一个topic,意思是啥意思啊,它只能往一个topic发送数据啊好,那topic我们的名字就叫做,呃,叫什么呢?Toic topic下划线杠log,我看对吧,是topic-log吧。OK啊,下划线杠lo OK啊,接下来别忘了我们是不是还有一个参数啊。Price from这个参数啊,你不设置不行啊,那把它设置成什么呢。Price这个参数默认是处吧,哎,我们要给它设置成false,设置成false呢,就是不以event的形式写入卡普卡,那就只写入一个body,好,那么这个flu到这儿我们就配置完了,好,那接下来我测试一下这个flu,看它行不行。
08:14
好,那接下来我们就测试一下我们的这个flu,它到底能不能帮我们把数据写入到卡卡啊,啊,我给它CTRLC拿过来,拿过来之后啊,来到我们的这个。查赛啊来到HELLO102,然我CD到OPT model room啊进来进来之后啊,我在这个地方创建一个文件夹啊make d一个job,那个D一个job,我呢把所有的我自己写的配置文件都放到job目录,你看我CD到这个糟博目录啊进来我们创建一个呗,我VI'm一个,注意这个地方啊,我们创建的文件名字啊,就不能随便写了,因为我们现在是做项目,你说我来一个一一啊点这个com法,我再来一个二二二点com法,那这个1122代表什么呢?哎,它不太好,我们要起一个带业务名字的,那我们现在这个逻辑是要干嘛呀,是要往把文件的数据发送到卡夫卡,那么这个名字我们就叫做file啊文件嘛,File干嘛呢?吐啊吐到吐哪啊,哎,卡夫卡kaf KA啊,发送到卡夫卡第二一个看。
09:30
UOK啊,这个就是一个带业务逻辑的这么一个文件名啊,我看到这个名字,我就知道当前这个文件它实现了一个什么功能,OK,进来进来之后我给它粘贴进去啊,你看粘贴进来了,然后冒号WQ保存。好了,那完事之后啊,那接下来我们就可以测试一下了,那测试一下我们怎么测试呢?啊,首先我们是不是应该先把这个给它启动啊啊啊,在我们的文档当中,哎,也有一个启动命令啊。
10:06
啊,往下往下翻啊测试。家长,然我们先把这个给它启动CTRLC先拿过来,拿过来之后啊,在这CTRL为右键粘贴看看啊,启动命令杠NG,然后呢,哎,我们要启动一个AA的名字是杠N啊,我们是A1啊杠C找到come目录啊。杠F呢,哎,指定我们的job目录下面的file to卡夫卡点卡,然后后面这是干嘛呢?哎,是我们log的一个打印啊,我们只在控制台上打印in份级别的,然后呢,输出到控制台,OK,那这个地方我要先给他回退一个目录,CAD1点点啊回退一个目录好了,完事之后我们呢,再执行右键粘贴啊,不然的话他找不到这个comp目录啊,OK,那么接下来我一执行。
11:00
啊,当打印出这些信息的时候啊,那么它就已经启动成功了啊,啊,你看SS啊启动成功了,OK,那呃,它启动成功了,我们如何能判断数据有没有过来呢?我们是不是可以启动一个卡夫卡的消费者呀?啊刚刚的这个SS啊,已经把数据帮我们发送到卡夫卡了吧,Kafk已经发送到卡夫卡了,那我在下面我再启动一个消费者,我看看数据能不能读出来,那读出来了就证明我们的S生效了呗,哎,我们这个呃生效了呗啊来呗,你看这有一个卡卡的控制台消费者,哎,就消费我们的谁呀,Topic-log这个主题啊OK,那我在103启动一个消费者粘贴回事。我们看数据它有没有过来呢?诶很明显它没有过来,那它为什么没有过来呢?原因是我们还没有生成数据啊,我来到这哈卢克102来到这个,我执行一个什么呢?我行一个LG加SH。
12:14
那他现在已经写数据了,你看那我这边数据是不是就读出来了呀,那么到这我们的flow是不是就配置完了,OK,那到这我暂停一下啊。OK,那flow到这儿我们就啊配置完了,你看数据呢,它已经能消费的到了,诶但是数据消费到了,我们想一想啊,这个录里里我们还能不能做一些事儿呢?你看啊,你说我们现在就有这么一条数据,那有没有可能传输过来的时候啊,哎,这一条数据就剩这一半了啊,就剩这一半了,我下边这一半它咔丢了啊,没了,导致我这个数据就剩一半了,那这个数据它是不是就不完整了呀,那不完整了,你说我们再让它往下游传递还有什么意义吗?
13:08
是不是就没有意义了,OK,那我们呢,可以在辅路这个地方做一个什么呢,做一个数据的清洗啊清洗,但是注意这个清洗呢,我们还不能给他做的。太重了啊,我们只能做一个轻度的清洗,为什么呢?Flu归根结底它是一个什么呀?它就是一个数据传输的管道,那如果说你把这个清洗的动作你给它做的太复杂了,OK,数据在管道这会一直堆积着啊,我这个拦截器啊,做的非常复杂,哎,功能这么多啊,功能有这么多,然后我每一条数据过来都要重复这么多功能,那么数据是不是就堆积到我们的这个管道当中了呀?哎,那也不行,哎,我们呢,在flow这个地方啊,也就是做一个轻度的清洗啊,太重的清洗我们不能放在这儿,好,那现在我们就来实现一个form的ETL拦截器。
14:08
那说到的拦截器啊,我们首先要用一个它创建一个项目啊。没项目下一步啊,那创建一个什么项目呢?就叫做lo intercept,好,Flow intercept picture this window。OK,那完事之后我们首先干嘛呀?哎,一个没问项目第一步是不是就要导包啊,那好了,那导包我们看一看啊,来到文档当中,在文档当中这,哎,已经把需要导的包给大家放好了,我们把底盘跟CS拿过来,哎,那builder呢,我们也一起拿过来,CRCOK,拿过来,拿到哪啊,拿到我们的项目当中,哎,在这啊CRLV粘贴。
15:09
CTRL完事之后,我呀,在这刷新一下啊,刷新一下给它导进来。OK,你看依赖包就进来了,好了,那我们来看一看吧,我们导的都是什么包?首先我们要实现的是的拦截器吧,那既然是拦截器,我们就需要一个杠NG-car好了,诶,那这有一个scoop标签,那这个scoop标签它是干嘛的呢?还记不记得这个标签的作用?哎,学没学过呀?啊,可能学过也忘了啊,这标签是干嘛呢?啊,如果说我们在这儿指定了一个per啊,指定了一个它,那么它有什么用呢?他呀,在打包的时候啊,这个包他不会给我们打进去,我们最终是不是要在这进行一个package啊,Package打包打成一个炸包,那打完之后这个。
16:07
他不会给我们打进去,好,那你看下边这个,我们没有指定P的,那么它就能打进去,那好了,那这个包是干嘛的呢?我们是不是要进行一个校验呢?你看我们这个数据是不是一个JA森的格式啊,那我们如何能判定这个数据它是不是完整的呢?哎,我们呢,就判断一下你是不是一个完整的JA森不就完事了吗?如果说你是一个完整的JA森,那我就证明你这条数据它是一个完整传输的呗,啊用谁呢?哎,有这么一个工具啊,叫做fastson,它是阿里巴巴的,它呢就可以帮我们来判定,诶你这个Jason它是不是完整的,好,那这是有这么样工具,哎,那这个那有同学说了。你这个东西打包的时候你带不上,那我在这写代码的时候,他能不能用呢?哎,它是可以用的,如果说写代码的时候你都用不了,那这个代码我们根本就写不了啊,那再有一个问题啊,你这个包打包的时候,你没有给我们打进这个炸包里啊,你没有打进去,那我拿到这个地方我能运行吗?啊对吧?然CTRLC给它停止,诶那我这个你炸包没有给我打进来,那我这能运行吗?哎,是可以运行的,为什么可以呢?来到这我们看一看啊CD到live目录,Live目录我们查询一下,查询一个谁呢?你看啊,有没有这个弗鲁姆杠NG杠号这个包呢?C re,你看看鲁杠NG杠号,它默认这个里边是不是有的呀,那么我们是不是就没有必要再把它给打到我们的项目当中了,我们就直接用我们集群上的这个罗姆杠N基杠口。
17:55
完事了,不然的话是不是出现两份啊,OK,你看这两个版本一致还OK,那如果说他俩版本不一致的话,那么这种情况哎,它就会出现这个炸包冲突的问题,好了,那我们呢,这个就直接不打了,哎直接用集群当中的,那好了,我们再看看下边这是什么呢?啊,下边这个build里啊,这个是打包工具啊,打包的工具。
18:20
啊,打包工具,那有同学说了,诶,我之前没有导入这些东西,我依然可以导包啊。为什么呢?啊看这啊看这地方我们是不是之前直接package就可以打包啊,对,那这个打包工具有什么用呢?对我们不没有这个也能打包,带它之后,只不过我们是可以实现一些自定义的打包功能,你比方说我们可以定义一个包名啊报名。哎,我们可以在这定义一个打包的名字,你看这什么with depends带依赖的,那也就是说我们打完的包有一个带依赖的,有一个不带依赖的啊,用它我们可以打出两个包,一个带依赖,一个不带依赖,好,那再有我们可以干嘛呢,你看。
19:08
假设我们现在这个地方啊,我在这写的是用1.8的啊,假设啊,我在这个地方用的是1.8的,用1.8的,但是我这个1.8的呀,我还必须带过去,我还必须要给他放到我的集群里,那我的集群里有一个1.9的呀,那么他俩就会冲突啊好,那我非得要让我这个项目,哎,我就让你用1.8的,能不能呢,也可以。啊也可以用,这个就是自定义打包工具它的有好处,它可以干嘛呢?自定义打包工具我们可以在这儿啊定义一个MY啊杠NG-car,哎杠NG-car,然后呢,那这个时候在运行的时候,它就会找到我们的MY-NG杠号,诶那这样我们给你重新自定义了一个别名,那么他们两个在使用的时候就不会冲突了啊OK,那这就是自定义打包工具它的一个特点,注意啊,你看有同学说那你这是爆红了呀,诶这个没问题啊,这个是代码级别检测的事儿啊,这个依然可以使用啊好,那接下来我们就实现一个拦截器,那实现一个拦截器首先我们要创建一个啊名,创建一个名,那创建一个什么呢?我们先创建一个包名,那包的名字我们看看啊,我们叫什么呢?
20:28
啊,往下往下你看搁这儿呢,Com点爱硅谷gmail先创建这个,先不创建先创建这个啊intercept啊RC拿过来CTRLV粘贴我们在这个包下面啊。Java u创建一个Java类叫做E啊EL intercept,那说到拦截器,我们首先应该干嘛呀?拦截器是不是应该实现一个?
21:02
Intercept啊,In t啊intercept,那实现哪一个实现下面的这个intercept OK,那进来之后它要求我们重写四个方法啊,那就是重写呗,那第一个是初始化的,那第二个是关闭资源的啊,那中间这两个是单event和多event,注意这个框架还没完事,我们呢还要给他来一个静态内啊public static class啊,Build,然后我们得实现一个,实现一个谁呢?实现一个intercept啊,Intercept里面的build,哎,Build,然后呢,我给他一个回括号,OK,那么这个地方你看啊,我还得实现一个方法,哎,实现两个,一个是我们的build啊,这个方法里我要用一个谁呀,用一个我们自己的ETL intercept好,那这有一个配置,OK那。
22:03
啊,这个完事了,完事了之后我们干嘛呢。哎,我们就可以啊实现我们的答案疑问的方法了,那说到这儿,首先我们要知道我们这个最终要对数据做一个什么事啊,是不是校验我们数据是不是一个完整的灾呢?那我们既然想校验数据是不是一个完整的灾,首先我们应该干嘛?第一步是不是应该先获取body。啊,获取body,获取body当中的数据啊,哎,先把body给获取出来吧,啊那怎么办呢?我们这是不是有一个event呀,诶CTRLC这个event里边,诶它是不是就有一个body的呀,我就能给它get出来,你看啊get出来,但是get出来它是一个什么呢?它是一个字节数组,我们没我们没有办法使用,那怎么用呢?我们在这儿啊又一个string,注意啊,这个包别导错了,导Java浪下边的这个string,然后呢,我们把包得给它传过来,传过来之后我们给他一个编码格式啊,Stand standard叉set u tf8,哎用UTF8编码,然后我给他一个返回值,名字叫做log日志嘛,Log好了,那获取完数据了,那获取完数据了,我们要干嘛呢?第二步。
23:31
判断。是不是合法的?三是不是合法的真好了,OK,那如果说我们判断出来啊,判断判断完之后,那如果说四呢怎么办。是是一个合法的筛,我就直接让我当前这条数据往下走呗,那就是re return一个谁呀,E return一个even他那如果说不是呢,那怎么办呢?我给他return一个谁呀,我给他return一个no,哎,你这条数据我就不能给你return回去了,你不是一个合法的单,你这个数据不行啊,我不能让你回去,你回去了你也用不了,那怎么办?我直接给你return到,然后我再下游给你处理好,那我们就按照这个逻辑来呗,那首先我们判断你是不是一个合法的摘啊,那怎么判断呢?那可能这个逻辑我还没写啊,那这样呗,我们这么的写if if if一个谁呢?啊,If我们在这儿啊,写一个这么一个类叫做JAU,哎,Jason工具类,这一类我们还没有定义,这一类我们还没有定义啊,然后呢,我们这个类当中啊,写一。
24:56
叫方法,方法的名字就叫做is Jason,谁呢?Valid vali Jason valid,然后我们把log存进去啊,代表什么意思呢?我这个Jason u当中有一个类叫做is Jason valid,那它能干嘛呢?他能帮我们校验我们这个JA森。
25:20
他是不是一个合法的,再哎,他就能帮我们校验这个事儿,判断我们这个再你是不是一个合法的再呢?哎,如果说你是的话,你看我们干嘛,我们在这return一个谁呀,Return一个event。EV return event,那如果说不是啊,如果说不是我return谁呀,我是不是直接把这个now给它return回去就完事了啊,这个呢,我给它放到上面CTRLX,嗯。不能式,OK,那你看我们这个逻辑是不是就写完了,那现在我们应该干嘛呀,是不是应该定义一个再son u啊,哎,我们看看这个Jason u里的is Jason valid这些方法应该怎么写好,那接下来我们在这儿啊,再创建一个包名啊,再创建一个包package,那这个包名你看我们叫什么呢?我们叫做U斯啊,啊给它拿过来,CTRLCCTRLV粘贴没事。
26:36
OK,你看一个叫做intercept,它是里边放拦截器的,那U斯呢,我们放所有的工具类,我们现在有一个摘森U,你像以后我们可能会有什么red u my serve u,哎各种U那都放到U包下面,那我在这new一个谁呀,我用一个JA森U啊好右键啊右CTRLV过来,好,那完事之后啊,在这个地方我就能倒包了,哎倒过来,倒过来之后这方法也红了呀,那怎么办?哎,我创建一个方法嘛,嗯,那方法他现在报错,我先让他不报错,我return一个出,我先一个出,OK,那你看啊,哎,ETL这个拦截器这个地方是不是完全没问题了,哎,它OK了啊那么接下来我们就专注于来看一看这个JAU,我们应该如何来定义呢?啊想一想这个JAU我们。
27:36
最终是为了干嘛呀,是不是校验?啊,这个摘U它的作用是干嘛呀?校验JA是不是一个合法的摘,那怎么校验呢?我们是不是导了一个包啊,叫做阿里巴巴的fast摘好,那这个包下面它有一个类啊告诉大家这里有一个类叫什么呢?叫做嗯Jason object,哎,有一个再object类啊那这个类里呢,有一个静态方法叫做price object啊这个log我们传进来啊,Log传进来那么这个方法啊,它最终哎,它能。
28:25
它能判断什么呢?我们看一看啊,我给它CTRLC拿过来,我在这自定义一个嫩方法,哎嫩方法,然后我干嘛呢?我怎么的,哎,我这么你这不是能校验JA森吗?那我就给你来一个JA森,你看啊,我给你来一个JA森,嗯,JA森ID啊ID冒号1ID是一,那接下来我右键运行,我们看一看。它会出现一个什么结果啊。你不是能校验吗?好了,那我就让你校验一下,我看看校验之后它会出现一个什么结果,嗯,稍等一会OK过来了,你看啊,它这什么都没出来,哎,也就是说它没有返回,那这么的,我给它输出一下点so啊,第2SO我们再次运行。
29:19
你看它会输出一个什么。第二次怎么还这么慢呢,应该。啊,他最终能打出一个什么呢?你看他呀,就能把我们这个JA object,哎,他呢,这个JA object.price object,他就会把我们这个摘给我们解析了吧,啊输出出来了,那我们想看的是什么呢?我们想看看,如果说它不是一个正经摘的时候,哎,那现在它不是一个正经在身了,传输的过程当中,数据变成一半了,我们看一看呢,它又会打印出一个什么结果。
30:01
啊,这种情况他报错了啊,他说我们这个灾三啊,它有问题,那我们想一想,我们如何能通过这个方法判断你是不是一个合法的灾呢?诶我是不是可以通过异常捕捉呀,来判断你是不是一个合法的筛呢?OK,那最终这个方法我们是这么干的,通过异常补捉啊,通过异常捕捉校验摘生是不是一个合法再生,那异常如何捕捉呢?你看啊,我们这个函数,哎,这个方法如果说它报异常了,那怎么报异常呢?有一个快捷键ctrl alt t,哎在这里呢,我们就可以捕捉check开,哎给你捕捉到,那怎么办呢?如果说你看啊,你这个是报异常了,那报异常了我们想让你干嘛呀。
31:01
啊,暴异常了,我们怎么办呢?我们是不是应该一个谁呀,Return一个false啊,False。那这个打印我们也不要了啊,那如果说你没有报异常,就是在TRY这个里边呗,那我return一个谁呢?我return一个出OK,那他就是正常的情况,在这儿是没有报异常,代表你是一个正经战神,那走到这了。你就报异常了,那报异常了证明你不是一个正经单身,我给你return一个false啊,你看这。如果说你一个处。代表,诶你是一个正经灾,我把当前数据回去,那如果说你给我们返回了一个fo,代表你不是一个正经灾,你这个数据我就不给你返回了,Return一个now好了,然后这个now我们在下边多event给它处理,那来吧,这个地方我们就写完了,那接下来我们看看多event应该如何写呢?
32:03
啊,那有同学说老师这多一文的,我会呀,你是一个list的集合呀,啊list集合我们来吧,啊来list点一个谁呢?我们点一个for for啊for for循环,然后在这个里边啊呃,List点一个get一个谁呀?啊get一个索引吧,Get一个I啊给它返回过来啊,它是一个event,那然后啊,我发现了你现在变成一个单event了,我是不是就可以调用单event的方法呀,哎,然后把我们的这个event问传进来,那传进来之后,哎,在这个地方。那我们可以干嘛呀?你看它无非就是返回event和返回now嘛,那这我依然可以做一个判断吗?对吧?我依然可以做一个判断,为什么要判断返回now的时候,这条数据我就给你删掉了吗?你就不是一个正经数,就不是一个正经摘了啊,我就给你删掉,那怎么做啊,你看如果说这个地方它等等于一个谁呢?它等等于no,那你看我们怎么办,我们是不是直接一个。
33:09
List点一个个谁呀,你看它能让我们填一个索引,是不是当前这条数据啊。OK,那么最终我们把有问题的数据删除了,哎,那没有问题的数据我们是不是就保留下来了,你看我这一个例子集合有这么多数据啊,那这个数据有问题我给你删了,那剩下这三个我是不是都保保留下来了,我把剩下的这三条数据我最终给你干嘛呢?我给你腾出去。好,那么就把正常的三次是不是就回去了好了,那现在问题来了。这么写行不行呢?我这么删行不行。好,那这同学感觉,哎,没问题啊,我通过方循环删除啊,那我们就来验证一下啊,我这么删行不行,好我在这儿啊,哎,这个焖方法里啊,我先给你注释掉,给它注释掉,嗯。
34:09
哎。啊嗯,什么情况啊,注释调注释调完事了,我先用一个I list ay哎,肯定有很多同学他不知道这个地方行不行啊,那我们测试一下呗,用一个I list啊,用一个I list,你就叫做list啊,那完事之后我们呢,往list集合里边啊添加几个元素点AB,首先我添加一个A啊A,然后呢,再来一个B,再来一个C,再来个B好了啊完事之后那A它的索引是谁呀,它的index。是不是等于零啊啊啊,同样每一个是不是都有index啊,每一个都有in index它的,所以是123好,那我们现在是不是就已经把。
35:12
这个list的集合给模拟出来了,那模拟出来接下来我们是不是要删除了,那你看一个一个删除了,通过for循环来删除,那好啊,那我这呢,我就不模拟for循环删除了,我这么删,我先在这输出一下soot,输出一下list集合啊,我们右键运行。诶,一个集合当中四个元素啊,没有问题,那完事,我们假设啊,D数据它不是一个完整的灾身,再有数据它也不是一个完整的单,那然后我们循环肯定是从abcd顺序循环吗?那行,那我们删除的时候是不是应该先删除B呀,我们看一看啊,这个B应该怎么删除呢?哎,我们是不是就可以直接模拟啊,我来一个list.remove我一个谁呢呢?是一个索引嘛,那它的索引是谁呀?索引是一好了,那接下来我在so。
36:15
点一个啊,输出一个list,我再运行,我们看看删掉一个元素它是什么结果,哎,是不是我们想要的呀,这个B元素它出错了呀,然后我给你删掉了啊没有问题,那好了,那我接下来我这里还有一个错误的,你这个也不行,我再给你删掉,那最终剩下的结果是不是应该就剩A和C了,好,我们来看一看。那接下来完事,我再次remove一个啊,我在这儿再remove一个list,第二一个remove和谁呀,我再把D删掉了吧,那D的索引是谁呢?是不是三呢?来过来,我在这右键运行啊,再输出一下。
37:06
CTRLC啊,再输出一下右键运行,我们看一看结果。他奇迹般的报错了,嗯,前两个一这个依然能删掉,但是当我删除第二个元素的时候,他报错了,那我们看看他报一个什么错啊,叫做index out of exception,哎,这个异常你们见过吧?宿主索引越界异常啊,为什么会出现这个异常呢?我在删除的时候啊,删这个没事,那肯定是删这个的时候出现异常量,意思是我们删除的这个索引它已经越界了,那不对呀,我们这个索引存在啊,你看ad。对吧,这个第四个数据,当我往这里添加一个D,那么这个索引就是三了呀,啊肯定没问题呀,那为什么删除的时候,他说我这个越界了呢,我们往后看啊,你看。
38:01
他说呀,我们的这个index啊,我们指定的是谁呀,指定的是三,但是我们集合的尺寸。已经剩三了,集合的尺寸剩三个的index是三,代表是第几个元素呢?是第四个元素啊,但是我们这个集合的尺寸已经剩三了,所以说哎,我们这么删除的时候啊,它就会出问题。啊,那现在我们就知道了,那为什么会出现这么一个情况呢?原因是这样的。我们的list集合呀,它的索引是动态伸缩的,哎,它这个索引呢,是动态伸缩的,你看我们刚开始是这个情况下,它的索引是0123没有问题吧,OK,那么我什么删除了一个元素,那有同学说我删除这个索引是谁呀?删除了个一吧,那我这个索引应该是023吗?不是的,它是这么删除的,它把一删除了之后,那么前面两个会向上补位啊,所以呢是会向上补位的,那删除了之后,你是三个元素依然是012。
39:20
那你看我们在这个地方remove了一个索引,为三的这个元素,那是不是就找不到了呀?哎,它找不到为三的这个索引了,OK,那么它就会报错,所以说在这个地方啊,我们就不能用for循环来删除,那我们可以用什么呢?哎,我们可以怎么干?给它干掉,用迭代器啊,迭代器它是没有索引这么一个概念的,它呢只有一个指针的概念啊,List,点我返回一个迭代器好了,那接下来迭代器怎么用呢?哎,通过一个while循环呢,通过一个while循环,我一个一个的给你拿出来,那怎么拿呢?点一个has next好了,注意has next是什么意思呢?啊,那有同学说我判断你是否有下一个元素,你看has next吗?有没有下一个呢?不是的,表面上看起来啊,它确实像是否有下一元素,但不是,它实际上是看看我们当前啊,假设我们这有这么几个元素,1234啊五个好。
40:33
最开始指针是指在这的,它实际上是判断我们是否有当前这个元素,哎,是否有当前这个元素,那如果说有当前这个元素,我们怎么办呢?那我们就进来,进来,我通过interer点一个next next干嘛呢?我把当前的这个元素给你拿出来好了啊,这个叫做even,在even好,你看啊,我们现在这有123455个元素,Has next,判断我是否有当前这个元素,那如果说有我怎么办?我通过next把它拿出来,并且。
41:18
指针向后移啊,Next它的意思是指针向后移,那也就是说he next是判断有没有当前元素,Next它做了两个事,把数据拿出来,并且指针向后移,他做了是这么一个事儿啊,OK,那这是迭代器的它的一个逻辑,好了,那我们把当前的这个event拿出来了,是不是又变成单event的处理方式了,所以说我们依然可以判断了,啊,If if,谁呀?If它啊,他C拿过来放到这判断我们这个even,他呀,它最终输出的结果是不是一个闹,你看如果说你是一个now,那我怎么办呢?哎,我直接用特特点remove就完事了。
42:09
OK,那么到这儿我们这个拦截器啊,哎,就写完了啊。好,那拦截器到这儿我们就写完了,那写完之后我们得测试一下这个拦截器生不生效啊,那怎么测试呢?我呀先给它打个包啊,先拍一下,先clean一下吧,啊在这里有点东西可一下。合定之后我们呢,给他package。拍重新打包啊啊打完了啊,打完了之后我们过来看一看这里边。诶,你看它现在是不是就有两个包了呀,一个是这个包,另外一个是什么呢?位depend这次哎带依赖的啊,但是这个带依赖的,它这个依赖打进去,这个打进去,因为我们已经给它para了,哎给它让他打包的时候,哎自动忽略啊,那接下来我在这右键open印,诶来到它这个目录啊来到这个目录我们干嘛呢?我们要把这个包上传到哪啊啊是不是上传到我们的。
43:13
102啊,102的立目录啊。给他拿过来,拖拽过来好。完事,嗯,我们LS一下in-cept OK,没有问题啊,啊,已经存在了,那存在之后我们也不能直接运行,我们得让它生效啊,怎么生效呢?哎,我们还得在配置上给它配置一下,好看看这个flow,哎,怎么添加拦截器了,是不是在S这添加一个拦截器啊啊,那忘了怎么配,没关系啊,我们来到文档,哎,搜索intercept CU,好来来到这我们往下找,看看intercept怎么配了呢?啊有我们呢,给它拿过来CTRLC放到这啊,你看怎么配置的呢?首先我们定义一个拦截器的名字,I1和I2啊,它配置了一个拦截器链,但对我们来说,我们是不是只有一个拦截器啊,我们需要一个I1啊,就完事了啊。
44:21
一个IE好了,那接下来你这个路径我们不能用啊,我们用的是谁呀?哎,我们得用我们自己的这个路径啊,OK,好,我来到build,在这右键copy reference啊,Copy reference复制它的权利名C粘贴,那注意这个地方啊,最后一个builder啊,类名和builder,这我们要用Dollar符啊,给它来拼接,OK,那么这个拦截器的配置啊,我依然要给它拿到我们的项目当中啊,在这我CD的点,然后vim job目录下面的file啊,To卡不卡点。com进来,进来之后我把拦截器给它添加上啊,右键粘贴。
45:07
好,然后冒号WQ保存,那完事之后我呀启动一下这个啊,启动一下OK启动啊启动它没有报错啊,应该没什么问题啊,然后呢,我们再启动一个消费者,我们再启动一个消费者,消费谁呀,消费topic log啊消费这个,那消费这个我们如何来测试拦截器生不生效呢?那同学说我继续Lg.SH呗,那你继续执行Lg.SH它生成的。肯定是完整的灾啊,这个不用啊,不用不用质疑,它肯定是完整的灾,那我们如何能判定这个拦截器生不生效嘛,我们是不是可以这么干呢?你看啊,我CD杠,Op model APP log,第一个log啊,我们监控的是谁呢?是不是监控所有APP点星啊,也就是监控这里所有的文件啊,那也就是说我们Lg.SH它是不是往这里写数据啊啊,Lg.SH就是往这里写数据,那么我们是不是也可以自己往这里写数据啊?
46:18
那我写一条错误的数据,我看看行不行呗,看看他这边能不能监控得到,如果说监控不到了,那证明我们这个拦截器生效了,那好啊,那我首先往这里追加一个,嗯一七啊,我追加一个什么呢?啊啊啊,不对啊,我先追加一条。正确的数据,好吧,我先追加一条正确的数据,ID冒号啊,这是一个摘什么,我给它追加一条,注意要用这个双啊双号用双的这个最加号,它代表最加,那如果说一个代表重写啊,要用双引号啊,双小小双大于号,然后APP点一个17啊过来进来,我们看看这条数据它能不能消费的到,诶你看数据已经过来了。
47:11
嗯,我们再看这边啊ID啊,唯一这个JA已经过来了,那接下来我们再给他来一个错误的再。错误的看啊,现在是错误的,那我们看看这边还能不能消费到呗,如果说他消费到了,证明我们的拦截器失败了啊,没有拦截住,那如果说它没有消费到,也就是这个地方它没有显示,那就证明我们的拦截器哎是生效的啊好,那我一回车你看看数据,现在已经写到这个文件了啊这边呢啊,他也没有什么动静啊,这边没什么动静啊,这边呢,哎,它也没什么动静了,那到这就证明我们的拦截器它已经生效了啊好,那这个视频我暂停一下,OK,那么这个拦截器我们也已经生效了,但是啊,生效了没问题了,那么前面这个链路我们是不是就打通了,那打通之后我们呢,来到这架构图再看一看。
48:14
啊,我们在这儿啊,有两个日志服务器,那也就是说前面这个环节我们需要部署两个啊,那这个日志服务器在102啊,这个在103,那同理,这个flu我们部署在102,那这个flu呢,我们是不是得部署在103呢?啊,要部署两个,我们现在只部署了一个,OK,那么这两个部署完了,我们是不是要给他来一个群体的群停的脚本呢?哎,不然的话,我还要来到两机器上去启动啊,接下来我们就要做这么一个事儿,哎,在另外一台机器上呢,也部署一个flu,然后在103上我们干嘛呢?哎哎,在这个,然后我们再来一个群起群零脚本啊好,在103上再部署一个flu。
49:03
那我们先来到103上看看呗,啊,先来到103上看看我CD-OT model进来这里有没有呢?啊,他他现在没有,那没有正好,哎,我来到102啊CB。点点进来之后啊,我把这个flu。给他发送一份XSYNC啊XSYNC啊,把这个flow给它发送过去,那么这样我的103和104,哎是不是都有flu了?哎,那只不过呢,我们只在102和103启动就完事了啊好了,那接下来我们看看这个群体群定脚本怎么写呢?哎,老师说那你这个太简单了呀,我们天天都在写群体群定脚本呢,好,那我们就写一下,那首先赛脚本啊,我先给他一个圆。那井号叹号B-best,那然后怎么整呢?那既然是起停,要控制启停,我们首先要通过case选择器吧,判断我们的第一个参数是start呢还是stop呢?嗯。
50:20
怎么了?你是start呢还是start,那如果说啊,最后还有一个EAC啊,还有个结尾,那如果说你是start,那我们怎么办呢?哎,我们执行启动的命令呗,那执行启动的命令我们要通过放循环呢,放循环在哪几台机器呢?在a do opop啊哈OP102哈,OP103上启动,那既然是for循环,我们就要有一个开始,还要有一个结尾,然后在中间我们通过SSH到当前的这台机器啊,循环到哪台机器上执行一个启动命令,哎,那这个启动命令我呀就直接拿过来了啊启动命令啊在下面呢。
51:12
这几个命令不用再写了吧,啊,已经写很多遍了啊。CTRLC啊,我们都拿过来看一眼,看它怎么写的啊,放这啊,启动命令首先我们要通过no harm来启动,为什么呢?为什么为什么要用no hop呀?如果说不用no hop,好了,我在叉cell执行了这个启动脚本,那么接下来我把叉cell关闭了,是不是就停了呀?同学们,它是不就停了呀?那好,我们昨天哎是Lg.SH我一关它停了,那这个停了是不是没有问题,因为它是模拟数据,但是flu是什么呢?它是数据传输的通道啊,那好啊,我叉CL起来的时候,那数据能传输,当我把叉C关了,数据到这传输不了了,那肯定是不行的,哎,所以说它呀,一定要通过noha啊好,那接下来杠NGA,然后杠N啊,杠C。
52:13
杠F,哎,三个参数啊,这个找到我们的file to卡点,然后呢,我们把标准输出给追加到第一频道啊,然后标准错误输出呢,我们给它从定向到哪啊,哎,从定向道标准输出,然后最终来一个后台运行,那么这个就是我们的启动命令啊,好给它拿过来放日好了,那接下来我们还得来一个停止的命令啊啊,还得来一个停止的。诶,这地缺个东西,Stop啊s stop stop,那停止的命令我们是不是就应该给换掉了呀?啊,这命令就给变了啊好,那来吧,那同学说那来吧,我们给他停一下吧,那好了,哎,写这我们发现一个问题,它有停止的命令吗?我们是不是没有学过停止的命令呢?那它有没有呢?不好意思,它没有停止的命令,那它怎么停啊?那有同学说,那我这么的吧,我来一个速度rebo,速度T,我把服务器关了啊,那把服务器关了是不是就停了呀?对,确实你把服务器关了它就停了,但是。
53:33
它停了,别的组件是不是也停了呀,整个服务器都停了,那肯定是不行,那针对于这种没有停止命令的组件,我们应该如何停止呢?啊,那其实应该有同学已经想到了啊,我们通常是怎么做的呢?你看我这现在我们又进程了GPS啊,现在没有,那这两东给它启动CD-o PG model,嗯,C啊嗯,不用了,我CD到flu啊进来进来之后我呢给它启动一下,你看啊,我们现在在这儿是不是有一个进程啊,这个就是我们的进程,那针对于没有停止命令的进程,我们可以怎么办呢?我是不是可以KO掉啊K杠九呢,Q杠九谁呀417。
54:23
五嘛,对吧,K有一个它的进程号就完事了呗,你看我在GPS那它是不是就没了,好了,那我们在这儿能不能通过Q的方式啊,给他干掉呢?你看我来一个QQ杠九,然后来一个竞争号呗,4175嘛,4175啊K肯定能干掉,但是有这么一个问题啊。我现在启动是4175啊,那如果说我再启动一次呢。啊,我再启动一次,我再GPS进程号变了,变成4326了啊KO行,但是这个进程号我们要给它变成一个动态的。
55:09
变成一个动态了,那好了,那现在的问题就转化成我们如何获取它的进程号了,那来吧,我们看看如何获取这个进程号呢?那首先我们得把这个进程给获取到吧,获取到这个进程我们是不是就能获取到进程号了,那获取进程的命令我们是不是学过呀,杠EF,然后谁呀,来一个管道啊,杠EF,再来一个grape grape吧,Grape谁呢?Grape一个进程名吧,你看它的进程名叫做A粘贴哎,我一回车。啊。啊杠EF啊,打错了啊杠EF好,我一回车你看那诶你看那个进程号是不是4326啊,那4326我是不是就过滤出来了呀,那么当前这个进程就是我们的进程,你看呢。
56:10
啊,过滤出来的application OK,进程我们过滤出来了,但是我们要注意一点啊,你看这到这这是一个进程号吧,那你再看这呢,这是不是又是一个进程啊啊,那也就是说我们通过它呀,获取出来了两个进程啊,这是一个,这是一个。注意啊,这个是两条数据,那这有这么多行,原因是它自动换行了,哎,我们在叉L当中,它自动换行啊,这是两,这是两条数据啊,两行好了,那我们是只想保留上面这一行啊,这个不需要啊,那它也是一个进程,那它这个进程名是谁呢?注意这个进程名啊,你看这一大串是我们过滤出来的,那它是谁呢?它就是这个。
57:01
叫做grape进程,好,那你这个grape进程我们是不是不需要啊,那怎么办?你看grape叫做过滤出来吧,管道呢,它也会有一个进程啊,那grape呢,它叫过滤出来吧,那grape呢,还有另外一个用法叫做法过滤,哎,我再来一个grape,谁呢?Grape-V-V小V叫做过滤出去,这个叫做把我想要的过滤出来,那么grape-V叫做把我不想要的过滤出去,那我过滤谁呢?过滤他自己,那你看graph我不想要,哎,过滤出去他自己啊,我们再一回车,你看看到现在是不是就只剩下一条数据了呀,哎,现在只有一个他自己了。好了,那只有一个他自己了,那接下来我们再看看啊,那在这个里边,我们最终想要获得的是谁呢?是不是要获得这个4326啊啊4326,哎,现在是这么一条数据。
58:05
注意啊,这个是一行啊,一行,那这么一行数据,我们想要获得其中的一个子串啊。哎,想要获得其中这么一个子字符串,那我如何能把它提取出来呢?那我们现在就想了呗,如何能用sell方式,用sell啊,用sell来做字符串切割呗,啊,那有同学想到了,哎,我可以用cut呀,看那cut是怎么做了呢?我指定一个起始的字符,我再来一个结束的字符啊,我给你切出来,诶表面上看是不是可以啊。啊可以啊,你看啊,我现在是起字符呢,就是起始的是一二三四五六七八九十十一啊可能是在这11,那再来四个1234 1234,哎起始是11,结束是15,那么我指定一个11~15,哎,我是不是就能把它提炼出来了。
59:01
但是有这么一点,我们现在是四位数的进程啊。那我运行着运行着它这个进程号就会变成五位数了,所以说cut它还不是很智能,那用谁能行呢?啊,这个时候我们就想到了,我们呢得用分割来做了,那谁能做切分呢?是不是aw k啊aw KA可以做切分嘛,那我们看看这个怎么用呢?啊,如何来使用AK啊aw k,那aw k我们在这儿print print一个谁呀,Print一个DOLLAR2啊,什么意思呢?Aw k它默认的是用空格切分空格啊,默认的是用空格切分,那你看看啊,我们这个进程号两边,看这进程号两边,哎,这是不是就是空格啊,这是不就是空格啊好,那它用空格切分了,那么接下来我们获取切分之后的第二个结果就是DOLLAR2,哎,把第二个结果我们给获取出来好了,那接下来我一执行。
60:17
你看啊啊,它这个地方得加单引号啊。是加单引号吧啊。加代号好,那我一次行,你看那它现在过滤出来的这个是什么呀。通过aw ke切分,我是不是就把我们这个第二个参数啊,切分之后的第二个参数,第一个参数at硅谷第二个参数就是我们的进程号好了,那到这进程号我们是不是就过滤出来了。那过滤出来了这么的,你看啊。那来吧,进程号出来了呀,这就是我们想要的,那我K-9KL杠九我给他KO掉不就完事了吗?好,我一回车,哎,他报错了,那什么错呢?他说这个参数啊,必须是进程或者是任务ID啊。
61:10
原因呢,是这么回事,这个K杠九它并没有把我后面的这个输出结果当做一个参数,而是把后面这一整个一长串当做一个参数进行Q了,那Q的时候它肯定是Q一个数字啊,进程号嘛,那你这是什么呀?这是一个字符串,那这个肯定是不行啊,那怎么办呢?我如何能给Q掉呢?啊,那在昨天的时候,我们是不是学习过这么一个命令啊X。ARGSXX-N1什么意思呢?反向传参吧,啊,来一个管道反向传参,我把前面命令的输出结果当做XX后面命令的输入参数呗,那后面我来一个K杠九。
62:06
你看我后面是不是需要一个进程号啊,那我前面这个命令的输出结果是谁呢?是不是就是它呀,把这个输出结果当做后面命令的输入参数我传过来,那么接下来我们在KO一下,你看啊,它没有报错,那我们在GPS一下,诶到这。我们是不是就给它Q掉了呀,那么用这个方式它就可以干嘛呢?可以帮我们关掉进程啊,给Q掉啊,那OK,我们把它拿过来,那这呢,我们还得想一个问题啊,你看我们现在这个进程号叫什么呢?叫做a play吗?啊,那我这么干你看啊,我在这我先启动一个,我给他来个后台运行。啊,后台运行还不管用,行,那这么的,我再开一个。
63:00
再开一个,再开一个,嗯,我再。嗯,这个不是啊,嗯,这么的,我把这个启动命令我拿过来啊,启动命令,嗯。到这吧,行,到这放这C拿过来放到哪儿呢?放到这右键右键粘贴啊对R,你看我又启动了一个flu,那接下来我们再查看一下GPSOK,那我现在有几个flu进程啊,是不是有两个呀。我现在有两个进程啊。对吧,那好,那我我再K一下,我们看看结果,好,那接下来我GPS好家伙,两个flu进程全都被干掉了,哎,那这个就是X杠啊,一个一个Q吗?好两个全都被干掉了,但是有这么一个事啊,那对于我们来说,我只想Q掉一个呀,你看这两个我只想Q掉一个,那你不能都给我干掉了呀,那你都干掉了。
64:06
两个任务都忘了这两个flu,哎,我们启动的虽然是一个进程啊,我们启动的虽然是一个,但是如果说我启动的是两个flu的job,如果我启动的是两个from job,那怎么办呢?那他俩应该是不一样的才对呀。那这个时候他把两个全都给Q掉了,这种情况我们是不是不想看到啊,我们只想Q掉其中一个啊,这个是job吧一,这个是JOB8,我1Q把JOB1和照班全Q掉了,那不行啊,我这个我得让他工作呀,我只想Q掉一个,那怎么办呢?我们再来看看啊,我再给他起来。嗯,我们再回来看看这个问题啊,怎么办?嗯,那接下来我们再回到上面这,你看啊,我们刚刚查询出来的这个进程啊,我们过滤的是谁呢?是不是过滤的application呢?那application在哪呢?是不是搁这啊,他把关于application的进程都给我们过滤出来了。
65:14
啊,那为什么它能过滤出application呢?注意它过滤的其实不单单只是一个进程号啊,进程名它是怎么过滤呢?看到这没从这开始啊,从这开始一直到这。哎,一直到这儿啊,不不不,不仅仅到这儿啊,一直到这儿啊。整个后面这些,哎,整个后面这些啊,前面这也包括啥,前面也包括啥,整个这些内容,你只要包含中间的任意一个子字符串,它都能帮我们过滤出来啊,从这开始啊,这个地方就是我们的名字。从这开始,哎呀,又话少了。从这开始啊,你看从这你只要包含我们的这个里边其中一个子字符串,那它都能帮我们过滤出来,那我们就找一找,能不能在这里找到一个唯一的标识,往后看看这。
66:13
最后这是一个什么呀?这是不是一个文件名啊,那么在一台机器上,这一个flow的配置,我们是不是只会启动一次,我们不会启动多次了,我们会启动多次吗?不会启动多次,那么我们KO的时候是不是可以过滤它呀,Fail to卡夫卡。啊,复制我们看看啊,那过滤的时候我这么过滤。嗯,这样过滤先到过滤这一步啊,先不删过滤,我过滤谁呢?我过滤一个饭小图,卡夫卡右键粘贴。你看我过滤fair小图卡不卡VR,哎,它是不是依然能把这个进程给我过滤出来,那么接下来我Q的时候,我在这我只Q它。
67:09
啊,我Q3图卡不卡,那接下来我一回声,你看我在GPS,那么刚刚这个进程你看过滤出来了,证明4987啊4987这进程是存在的,那么我现在给它Q掉,是不是证明这个地方也能通过。这个名字啊,也就是我们的文件名来给它Q掉好了,那接下来我把这个拿过来复制,最终啊,我们删掉进程啊,杀掉进程就是它我先给它放到这儿啊好,那放到这儿呢,我再把我们文档当中的这个命令,哎,也给它拿回来。看一下啊,CTRLC拿过来拿过来放到这来,我们对比一下呗,啊这段来控制对比一下,看看文档的和我的啊,你看哎是不是看起来一样啊,但是哎文档的这个地方为什么长出来一块呢?我们找找哪不一样呢?啊在这儿它多了一个反斜杠,哎,为什么要多一个反斜杠呢?我们分析一下啊,你看DOLLAR2是什么意思呢。
68:21
我们想的是获取aw k切分的第二个参数吧。好了,那你看这呢,DOLLAR1,这个DOLLAR1是干嘛呀?获取我们脚本的第一个参数,那DOLLAR2呢,获取脚本的第二个参数啊,那这个到德二呢,你说它俩会不会冲突啊,他俩一定会冲突,如果说我这个脚本传了两个参数的话,那么它这个地方默认会获取脚本的第二个参数,那我们如何能让它获取当前这个命令输出的第二个参数呢?我们在这给他来一个反斜杠转移,就是告诉我们当前这个aw k啊,获取,哎,告诉我们当前这个DOLLAR2啊,是获取它当前这个函数,哎,它当前这个命令所输出的第二个参数,OK,那么我们把它拿过来,哎,Q的时候,我们要给它加上一个反斜杠啊,啊,这个命令呢,放到这好,那完事之后,我们再给他一个输出结果啊,再给他一个输出ec so。
69:28
单引号啊,双引号输出一个输出个什么呢。输出一个长了啊,输出一个Dollar Dollar I这台机器的啊。启动啊,这也叫做上游啊,上游龙启动。
70:00
那下边这是stop呀,那stop。上游flu停止好了,那么接下来我们就测试一下这个脚本啊CTRLC拿过来,拿过来之后放到我们的项目当中啊,放到哪啊来到哈标零二在这CD到加目录的并目录进来,那进来之后我们vim一个f1.sh,哎,我们呢会有三个flu啊,我们分为F1F2F3啊那它叫F1SH进来,进来之后我给它粘贴一下啊,有没有问题,简单看看啊,当然了道啊也C啊OK,没问题,那没问题,冒号WQ保存保存完了,Ch mod777,给他一个权限f fe.sh回那接下来我们在103还没启动啊,102启动了,那这么的我先KO一下看看,我们先执行一下。
71:03
f1.2s shs top先执行一下停止没?诶都停止了是吧?XSCCPS啊都停止了,那刚好我们测试一下启动,f1.shtt启动。完事,我们查看一下进程GPS,你看看在102和103这个进程是不是就启动了啊,启动没问题,那我们再测试一下停止s top啊,看一下停止。好,XCL这PSOK,那停止也没有问题,那到这上游F群起群定脚本我们就完事了,好,那我们先暂停一下。
我来说两句