00:00
然后接下来很重要的一点就是要向集群里边去提交作业啊,前面大家也已经看到了,这这个接口都已经放在这儿了,是吧?啊,当然我们刚才把它给关了,还是把它先提起来啊。102。我们直接再把它提起来,提起来之后,接下来我们需要向他去提交作业,那这里边我sum me,呃,大家看这里边有一个加号对吧,这个叫a new啊,所以这样的话我只要一点就可以上传了,那上传什么东西呢?哦,大家自然就想到了,应该把我们打包好的那个项目一个炸包直接传上去,所以接下来我们其实还应该在这个项目里边去做一个打包处理,那这里边给大家推荐一个这个打包工具啊。呃,这个打包工具叫做。Maven assembly plug in,这是一个非常灵活的maven打包的插件啊,它可以让我们去定制一些依赖啊,就是哪些依赖要,哪些依赖不要,可以灵活的去做配置啊,所以在实际项目当中使用可能会比较多一点,我们把这个引入进来。
01:14
当然在当前我们这个测试的过程当中,其实没什么用啊,啊,就是大家不用这个直接去打包也是可以搞定的。这边我们是build这个标签下边引入了plug in对吧?呃,引入了一个这个插件。然后接下来。大家可以知道,在这个ma这里边,它有各种各样的生命周期,其中有一个生命周期叫做package。大家需要注意的是,在这个之前啊,我们应该至少要comp要要把当前的这一个文件要编译出来,要不然的话就是之前如果我们已经运行过这个代码的话,当然它是已经编译过的,这是没问题的,如果要是你直接写完了之后没运行,直接去打包,诶,那可能就有问题了,他根本找不到那个编译之后的,呃,Build好的那个结果啊啊,所以大家要注意一下这个具体的流程。
02:05
好,我这里边做一个打包。呃,我我这里因为。已经之前做过对应的操作,所以这里边我相关的这些插件啊,相关需要的一些依赖都已经有了,大家第一次打包的时候可能会稍微比较慢一点,就是可能这边还要下载很多东西,大家也耐心一点啊呃,大家看现在我已经打包好了,对吧,比我的success,然后我们去看一眼。现在就可以提交了吗?我们找到啊,不是这个test,我们应该是这个tutor。大家看到应该在哪里呢?当然是在target下边对吧,这个其实目录是可以在这里看到的,大家看到。Building char对吧?呃,这里边flink tutorial target,然后下边有这样的一个,这我们这里边默认啊,就是在在这个引入了这个插件之后。这里边是没有做任何定制化的操作,那没有做任何定制化操作它会怎么样呢?就会把我们所有的依赖全部打进来,所以后面我们加了一个后缀叫做jar with dependences啊,就是相当于这里边用到的flink对吧?还有这个lo for g,各方面的这些依赖就全打进去了,这个有必要吗?其实没必要,因为我们在集群运行的时候,弗link当然是有的呀,没有必要再去把它添加打进来,对吧?啊,所以没有必要用这个更大的。
03:27
添加了所有依赖的这个包,我们直接用什么呢?就用默认打好的这个,大家看flink就有1.0step shop就用这个就行,这就是VIVO默认插件给我们打好的一个包啊,我们不引入这个插件,不做这个打包,其实也是可以得到这个的,所以把它提交上去。然后接下来大家可能会想到,诶,这就可以了吗?这看起来什么反应都没有啊,我们看看这个job,这里有running drop吗?没有。啊,这个其实大家很容易想到,这只是把当前的抓包。提交到提交给我们这个web UI,那相当于是这个客户端已经拿到它了,对吧,那就相当于是我们当前这个集群这个客户端获取到它了,但是这个抓包里边的任务,它的作业到底是什么样的呢?你还没有做解析呢呀。
04:15
因为在这个抓包里边。大家会发现是不是我们本身是有两个类的。啊,你如果要有两个类,而且他们都有一个main方法,你到底执行执行入口在哪里呢?哎,那你不指定这个入口类的话,我根本不知道该怎么执行嘛,所以我们看你这里边还需要去指定entry class入口类啊,那比方说现在我们既然是这个流式执行环境嘛,对吧?呃,我们这里边去把这个stream count啊。这里直接copy reference。直接把它放在这儿,把这个类名啊直接到这里就可以了,然后接下来大家看到这里面有拍出来例子,这是什么呢?并行度,这就是说我们现在是一个分布式的架构,你可以把并行度调高,让它用多线程去执行,对吧,就类似于这个多线程并发执行,那比方说这里面我们给一个二。
05:11
可以尝试看一看啊,会变成什么样子。哎,如果要是不给的话会怎么样呢?哎,不给大家回忆一下,之前我们那个配置项里边不是有一个二来例怎么点default吗?配置文件里边,哎,默认是一,那当然它就是一了,所以这里边如果给的话,就会覆盖掉那个默认。然后下面还有两个选项啊,一个叫argument啊,当前程序的argument,这是什么呢?这其实就是你假如说我们当前Java运行的时候有参数的话。那那当前你就可以在这儿去添加参数,然后另外还有一个是c point pass啊这个point又是个啥呢。这是所谓的保存点哦,这那个flink,它其实是允许我们把之前的状态先保存下来,然后呢,诶我把这个应用关掉,关掉之后可以在基于之前的状态去启动这个当前的作业啊,所以就相当于是一个存盘,然后又重启的过程啊,现在我们没有用到,所以这一部分也不用去管啊。
06:13
好,接下来我们看一看吧。啊,有一个收收plan是什么呢?哦,大家看到一个类似于这样的图,这表示的其实就是我们真正流处理过程当中。具体的一个处理流程,对吧?啊,大家看我们当前的这个word count,它是分成了三步走。第一步叫叫socket stream s。哎,这相当于就是读取数据流嘛,从这个文本流里边读取数据源啊,把这个流先读进来,下面还有一个PARALLELISM1,诶这是为什么呢?为什么我们不是设置了并行度是二,它怎么是一呢?这里要解释一下啊,啊就是对于有一些这个圆而言,它是没有办法调大并行度的,比方说像这里的这个文本流。
07:00
文本流,因为大家知道你能用多个线程去同时读我们那一个,呃,一个端口的那个数据吗。啊,其实这里边它是不允许的啊,就当前这个flink的这个设置,它是不允许这样去多线程并行去读取的,所以这里边它的并行度就是一,你外边怎么设它都是一。然后另外下一步是什么呢。我们当然还记得下一步,第二步就是读进来之后,接下来就是一个flat map,哎,所以大家看二步操作Fla map。定程度是二,然后再接下来呢,是一个key aggregation,然后大家看有一个箭头,然后think。Think到哪里呢?Print到标准输出,哎,那大家知道后面这个think当然就是打印输出了,所以它后边的最后一个方框这个任务啊,是把我们的分组这里的T之后分组聚合。统一叫做一个k aggregation,分组聚合,然后还有这个打印输出都合并在一起了,当成了一个任务放在了这里,哎,这就是我们考察他的计划啊,看看当前这一个任务到底应该怎么划分,最后发现,诶,最后是这样的三步任务。
08:15
那并行度,既然后面这两个任务并行度都是二,那大自然知道了,应该具体执行的应该有五个任务了,对吧?一加二加二应该有五个任务,然后接下来我们去做一个提交submit。这样就可以提交了,大家看直接submit,现在这就真正的可以去做运行了,但是大家看这里直接fail了,为什么会fail呢?诶,大家如果不知道怎么回事的话,我们可以去看一看。是不是可以去看一看log啊,大家看到这个job manager这里边,我们可以去点开它的log去看一看啊。好,我们看一下下边。Job manager,哎,大家看到这里边他说的是什么呢?哦,Socket,大家看这个他执行这个source任务,Socket。
09:03
读取这个socket文本流的时候,他去做执行的时候connection refused,为什么呢?因为我们是不是那个哈杜102上根本就没有起那个NC啊啊,所以这里边当然他就报这个错了啊,它连接拒绝嘛,所以现在我们也知道这个问题出在哪儿了。现在我们要做的当然是NC。LK,那注意这里必须在哈图福102上面去起,为什么呢?因为我们代码里边是写死了的哈杜福102对吧?啊,所以这个端口号这个都不能变啊,那当然如果想把它作为一个变成一个可变的,你可以从这个配置文件里面去读取,或者说就是我们说的你也可以把它当成一个。当成一个参数,那大家看这个program啊,比方说叫这个杠host name啊,叫这个哈杜普102。可以用用这种方式去传入啊,这里只是给大家举一个例子啊,我们把它呃作为这个参数传入,或者从配置文件里面去读取都是可以的,实际应用确实一般不会这么去直接哈扣写死啊啊,那这里既然已经这么提起来了,接下来我们再重新提交一下,这个应该就没问题了,对不对,好,接下来还是啊。
10:19
并是二红星提交。诶,大家看现在它就不会直接挂掉了,对不对,哎,那他不挂掉,但是这里边为什么没有数呢。这里面好像这个这个什么东西都没没输出对吧,那当然了,你现在。还需要在这里去做一个输入才能够有输出嘛,啊,我这里面hello word先输入一条。看一看。诶,大家看到,诶这里这个by sent好像还是没有啊,但是这里边的这个records sent这里边就多了一个一,然后后边多了一个二,对吧?哎,这里边看的很明显啊,啊,这里边你看这里边的这个bits received也是就就变得更多了。
11:06
那我们想看的是想看到最后执行的结果,执行的结果在哪里看呢?啊,我们想到最后是输出到标准控制台,那应该是输出到job manager的标准控制台还是task manager的标准控制台呢?看一下draw manager,大家看这有logs,另外还有s t out,这是标准输出。这里面没有。只有一些cello GR日志管理的信息。哦,所以大家会发现这个其实应该是task manager。为什么呢?因为task manager才是我们真正的。干活的人吧,干活的人执行了最后的print,那当然他的print也是print到自己的这个标准控制台了,对不对啊,所以我们会看到啊,这里是一个WORD1。那这个104是WORD1,自然103里边就有哈一啊,这个就看的很明显啊,然后接下来我们再去输入一条。
12:05
Hello flink。哎,这里来看没有没有变啊,我们刷新一下,因为它不是实时变的,刷新一下你看到哈,变二了,哎,那同样另外一个数据那个flink啊,没还是没有到这儿来,诶大家看这里边是不是就是WORD1FLINK1啊又多了一个flink。这就是我们提交作业啊,运行作业的这样的一个过程。
我来说两句