00:00
来就开始给大家讲一讲flink的部署运行的过程了啊,那关于这个flink部署运行呢,哎,我们当然知道,就是它也分成不同的模式,我们可以直接就自己,呃有有一个集群环境对吧,直接起一个s lo模式,起一个link集群也可以呢,就利用一些资源管理平台,比方说雅恩,比方说K8S这些都是可以的,那我在这里给大家做示范呢,就直接在本地起一个这个STEM模式的一个集群,大家看一下这个操作步骤,那应该就知道它到底应该怎么做了,好,那我进入到当前自己的这个Linux虚拟机环境里边,接下来呢,呃,大家会看到我首先应该要把对应的这个flink的呃安装包要要下下来,对吧?呃,我们现在用的是flink一点十点一,然后b scla2.12啊,我们用的是这个一点十点一,然后skyla2.12的这个版本,所以接下来直接。
01:00
大家就做一个解压操作了,我现在已经把它解压出来,那当然就可以直接进入到当前一点十点一目录下边,所以接下来我做的所有操作都是基于。当前解压之后的这个根目录来做的操作啊,大家如果觉得这些就是有点看不太清楚啊,里边的哪个包的话,你只要记得我接下来做的操作都是基于这个根目录就可以了啊,那接下来我们首先看一下这个目录下边有什么东西啊,这里边的东西我们会发现主要的目录结构啊,那别的这些都没什么,你plug in这插件对吧?Op pd一些这个呃,自定义的一些内容,Log日志啊,License啊,还有这个啊,大家知道就是library啊,我们想要用到的一些库,一些组件添加的东西可能都要放在这个下边。啊,然后另外还有examples就是例子,所以我们最关心的一看到这组目录一就是最关心的,其实就是前两个。
02:02
一个叫做并病,大家知道是binary对吧?哎,我们可以看一下这个并目录下边有什么东西,那就是一堆命令。一堆呃,SH这样的一个shell脚本的文件,对吧?或者还有一些没有后缀的,大家看这flink这里边就没有后缀,那这是我们最常用的啊弗link做提交部署控制这个drop运行的一些一些命令都是用这个flink命令来来做的啊,那这个我们后面讲到提交任务的时候再给大家说啊,那这里边首先我们看一看外边这个com复目录,Comfort复目录大家知道是configig嘛,如果是config的话,那当然下边就是一堆配置文件了。那这里边我们看到的配置文件最主要的有哪些呢?诶直接一看的话,好像大部分都是log for g相关的东西,对吧?啊,那log for g的话都是跟当前的这个日志系统有关,包括这个log back啊,这些都是跟日志相关的,我们这里边可以这些东西都不管,这里边主要需要考虑的就是第一个Li ya某。
03:10
另外还有两个就是这儿的masters和slaves啊,那当然了,就是masters跟slaves是我们在配这个集群环境的时候需要去注意的两个文件,那平常我们对于这个集群里边的基本的一些配置呢,重点都在这个f com点压文件里边。好,压录文件大家知道是一种特殊的配置文件格式,好我们进去看一眼,大家就知道到底这些东西长什么样了啊,好,进来之后大家看一眼,这就是当前的这个文件啊,在这个压模文件里边,井号开头的是注释啊,所以大家看一些这个说明性的一些文档都是拿井号前面分割的啊,然后我们首先第一部分就是common。就是比较通用的一些配置项,那大家看到其实我们一般创建一个flink集群的时候,主要也就是改这个common里边的东西,我们看看有哪些吧,首先第一个我把这个直接放到下边来啊,大家看一下啊,一目了然。第一个这个叫什么呢?叫job manager rpc address。
04:12
然后给的值是local host,这这种方式,这就是压模配置文件里边的一种写法啊,它它的所有的这个呃,里边的配置项都是用这种格式来写的,就是前面是我们当前配置的这个字段名,然后后边一个冒号空格,然后后边给一个当前的value里边的取值对吧?那所以这个整个压模文件就相当于是就像Jason一样啊,就像我们的其他的一些配置文件一样,一个K,一个value对应的一个键值对的匹配啊,那这里边我们定义的这个东西是什么呢?叫做job manager的rpc address。那这里边就要给大家先解释一下什么是job manager了。与之对应的,下面我们看还有一个东西,也是叫manager,叫做task manager啊,对吧,这个通用配置里面主要就配配这两个东西,主要是配这个job manager的东西和task manager的东西,那它俩分别代表什么含义呢?
05:09
简单来对应的话,大家可以把它理解成啊,就这里边的这个job manager啊,我简写叫GM,大家可以对应着之前我们讲Spark里边的driver。然后这个task manager的话。大家可以简单对应之前我们讲的。Or?啊,所以直接来说的话啊,那具体就是如果具体来细细的去介绍它的功能,大家可能发现跟Spark里边的概念还不太一样,但是我们一开始接触可以以这个作为切入点,大家有一个直观的印象,所以这个job manager主要是干什么呢?字面理解他负责管理job。那我们提交整个写了这个flink程序之后,提交的时候,那本身就是一个drop,一个作业嘛,所以当前的整个作业相关的东西都是这个job manager来做管理的,所以它的主要任务就是管理调度对吧,然后分配任务,所以相当于我们最后具体要执行的任务呢,是由job manager由接收到这个code啊里边啊,他去做分析,做执做这个,呃,做一些转换,得到我们最后要执行的那个操作,我们管那个东西叫做执行图,它画出一张可以执行的那张图来,然后呢。
06:36
把具体的任务就分配给task manager去做执行,所以这个task manager我们看字面上它叫manager,诶,好像也是个管理者,也是个经理啊,就像我们在很多公司里边,动辄一个人的名名口啊,都是叫什么什么经理啊,但是其实我们发现了这个task manager他主要管什么呢?就管自己当前执行的这个任务,这个task,所以他不就是干活的人吗?啊,所以有时候这个task manager也不叫那么好听啊,有时候直接就就就叫那个他是worker,有时候直接就这么叫,这个是也是常见的一个说法,大家如果就是有时候在一些文档里边听到这个,看到这样的说法的话,也不要觉得奇怪啊,都是一回事啊啊,当然也有一些可能借用Spark里边的概念,可能直接管它叫做thator啊,这个也是也是可以的,大家具体来讲就是他是干活的人,他是做协调调度管理者啊。
07:34
简单理解就是这样,那我们现在配置这些东西是配什么呢?首先就是配置job manager的地址对吧?啊,这这里边就是,那那有一个RPC呢,大家就知道了,在这个集群里边内部做通信都是用的RPC的方式,对吧?呃,就是所谓的这个,呃,远程过过程调用的这种方式啊,那这里边给的这个默认的address,当前的这个host nameme的这个主机名是local host。
08:04
你如果说要用这个其他的一些主机名的话,你改成自己的那个名字就可以了啊,那或者说就是你这个主要是看什么呢?主要看就是到时候你去启动当前的flink集群的时候,你在哪台机机器上起,你如果说你在这个某一台机器啊,比方说哈杜op,呃101对吧,你就在这台机器上去启动当前的这个flink集群的话,那你这里边配成local host也是可以的,那提提起来之后转manager在哪里呢?哎,那就是你当前的这个101啊,所以大家只要知道这个它对应是什么东西就好了,大家具体配置的时候呢,最好就是你用自己定义好的那个主机名都改过来就好了,对吧,你你避免出现歧义嘛,啊那另外还有就是这个端口号,这里边默认的端口号是6123,这是它内部做通信,就job manager跟task manager之间互相通信的时候用的这个RPC的通信端口号。
09:03
然后另外呢,下面还有一个是job manager heph size,哎,那这个自然我们就想到这要配置的是job manager的JVM的一个堆内存大小。啊,所以其实在这个弗link集群里边啊,集起来之后,大家可以认为什么drop manager啊,Task manager啊,大家可以认为它本质是个什么呢?就是一个GVM进程啊,所以说这里边既然是GVM进程,你需要给它配置对应的啊对内存大小啊,啊,那对于这个draw manager而言,用它来指定draw manager he size,这里边默认是1024兆啊,那这个你可以根据实际运行过程当中的需要去做一些调整,然后另外呢,还有一个就是啊,大家自然想到了,你既然有这个管理者啊,Drop manager的堆内存大小。啊,那是不是也应该有干活的人的那个堆内存大小的配置啊,那这个其实是应该更重要一些啊,那之前其实在早期一些的版本啊,就是在这个1.1.8之前1.7几版本的时候,这个有task manager有一个配置的这个名字就叫做task manager he size就跟这个job manager是完全对称的啊这个就比较好理解,但是后面呢,呃,调整了,为什么呢?因为其实我们真正在做这个运行的过程当中啊,就是这本身task manager它所要占用到的内存其实不仅仅是gbm自己的堆内存。
10:34
就可能还涉及到这个对外内存对吧?啊,就可能还涉及到,甚至还有可能涉及到一些GM,它需要的一些额外的特殊的一些内存的配置,所以说为了区分这些概念,后边就是从1.8之后开始啊,大家看这个配置就不叫task manager he size,而是叫做task manager memory process size,就是当前task manager整个进程的占用的这个内存到底是多少。
11:05
啊,这是这个比较常见的一个配置,大家看到这里面默认是1728啊,配置了这样的一个大小啊,然后还有另外一个配置项呢,是叫做大家看到下面有一个助调的啊,叫做task manager memory flink size,一个叫做process size,一个叫做flink size。诶,这两个有什么区别呢?呃,略有不同,大家可以认为基本上它都指代的是当前这个task manager啊,它当前这个进程就是我们运行的这个进程的占用的内存空间的大小啊,那具体来讲的话就是process size,这个要比flink size要稍微大一点,它它涵盖的这个内容要稍微多一点,那么flink size这里边它就包含当前这个JVM进程占用的堆内存以及对外内存,这些都包包括在包括在里边啊,当然这个对外内存主要就是所谓的这个就是所谓的直接呃访问内存对吧?Direct memory及flink里边所定义出来的manage memory,就是后面我们要讲那个状态,呃状态管理的时候啊,它的那些本地的状态是放在这个里边的啊,所以这里边其实我们是呃,就是主主要能用到的东西都包括在这个弗Li size里边了,那这里边的process size又又还。
12:23
多了什么呢?就还多了有一些对外内存,它不是我们在flink呃,在做状态管理的时候调用的,而是JVM本身用到的一些内存啊,这个process是把这个也包含进来啊,那大家平常可以可以不管这么多太太复杂的东西,对吧,那我们只要记住一个原则,一般是怎么样呢?这里面默认一般一般这两个就开一个就可以了,对吧,就配一个就可以,一般是就是默认开启的是这个process,因为它。表示的这个含义最广阔嘛,最大嘛,对吧?啊,那那一般情况我们其实是,呃,就是说如果说啊,我们如果用到了这个是stand lo模式的话,那我们往往就是这这里边我们可以去直接配置一个这个link size就行,但是你如果要是用到了比方说这个像雅恩或者K8S这样的资源管理平台的话,那我们是在容器,就是容器化的分配资源嘛,对吧,在这种里边,那我们其实是要对应着那个你要请求容器的那个内存空间的,所以这个时候呢,你最好是把所有的都包括在内,所以最好是要用这个process,所以大家看这里边默认开启的是process size啊。
13:41
呃,这个就是大家大概了解就可以了,整体来讲这就是内存大小对吧,配置内存大小,然后后面还有两个比较有意思的,呃,通用的这个配置项,一个叫做task manager number of task slots,然后默认给了一这个东西又是个什么东西呢?
14:00
呃,简单来讲,大家可以看上面这个注释的说明啊,简单来讲它是说什么呢?就是每一个task manager它可以提,它可以提供就是很多个对吧,一个或多个task slots slots这个概念大家之前其实也接触过,它是就是插槽对吧,槽位这样的一个概念,那具体在我们执行的过程当中,相当于是什么呢?就是分配好的一组资源,然后在这个资源上你可以去执行任务,哎,如果后面我们讲到运营架构,大家就会发现了,其实就是什么呢?你一个任务就得分配到一个slot上去执行,它就占用一组特定的资源。啊,那一个task manager,你这里面到底它有几个这样的资源呢?几个这样的插槽呢?诶这是我们一开始就可以在集群配置里边把它定义好,默认是一默认我这里边只有一个啊然后呢,呃,就是这里边大家会看到就是每一个插槽它会运行什么呢?运行一个并行的管道pipeline。
15:06
这又是什么意思呢?啊,现在大家可能不太明白这个含义啊,后边我们讲到的时候再给大家回过头来说,这句到底是什么意思。这个是number of task laws,然后另外还有一个叫做parallelism.default paraelism,前面我们提到过了,这个是并行度的意思,那并行度默认是一,大家想这个并行度默认是一,那你跟前面我们讲到的这个task manager,它默认有这么多slot,这这难道不是一回事吗?这是不是一回事呢?这里边大家要做一个区分啊,这里重点做一个区分,就是这里边的并行度指的是我们真正一个drop提交之后,在整个这个flink集群里边运行的时候,就运行时啊,它到底有几个并行的任务,它的整体的这叫做它的运这个并行度,而这个task manager呢。
16:08
它跟我们当前运行的job没有关系,跟你运行不运行也没关系,它是task manager本身资源分配的一个静态的一个属性,一个状态,就是说我到底有多少资源对吧,所以这里边这一个参数,我们配置的是一个静态资源的个数,而至于你说你这个静态资源要不要用,能不能用的起来,或者说够不够用啊,那这个。跟跟我这里的配置没关系,对吧?啊,那跟什么有关系呢?你运行时动态的那个那个状态跟什么有关系呢?跟并行度parallel有关系。啊,那这里边就是大家看到了,为什么它有一个default呢?哎,那就是说如果你在代码里边,我们前面不是提到在代码里边可以对于每一个我们管这个叫做算子啊,或者叫做操作去设置它自己的并行度吗?你假如没设的话,我们在开发环境里边默认是按照当前CPU的核心数,那如果在集群环境里边按照谁来算呢?因为集群环境里边甚至有时候我们都是那个,呃,这个容器化的那个资源管理平台嘛,你在雅安上面,那那肯定不能按照我们当前的这个CPU核心数据配置啊,啊,那所以这里边我可以给一个默认到底是几,这里边默认是一。
17:29
啊,这就是关于这个配置项里边主要的一些通用配置,那后面还有一些其他的,呃,大家会看到后面大部分都是被注掉的,我们一般是不是特别的关心啊,啊就这里边比方说后面有这个HHA高可用的一些配置啊,那大家如果用到的话,你去配置,比方说我们那个HTFS对应的那些存储的路径,对吧,这都是可以在在里边去做一些调整和配置的,然后就是我们当前这个高可用的那个keepper啊,它的那个。主机名,端口号对吧?这些你都可以打开去做配置,然后另外呢,还有一部分,这个是叫做容错性和checkpoint啊,做这个检查点操作,大家知道这个就是保证故障的时候可以做这个恢复对吧?啊这里边涉及到一些,但是呢,我们现在这个不是重点,我们后面讲到容错性和这个状态管理的时候,再给大家说这里面主要配什么呢?再看配这个所谓的状态后端,对吧,State back end啊这个概念我们后面还会再呃给大家详细的提到。另外就是还可以定义就是你的那个checkpoint到底存哪对吧?哎,你可以定义当前的这个check checkpoint,如果说你存在这个文件系统里边的话,那到底那个地址你存到哪里去呢?那你可以定义这个HTFS的这个地址,地址对吧?啊,因为我们分布式嘛,所以这个跟这个HTFS是天生有这种整合的这种方式啊,那然后后边需要给大家还说一个的是什么呢?这里边我们提供了一个rest。
18:59
和web前端提供了这样的一个,呃,就是网页我们可视化的一个管理平台,那这个前端这是默认我们这个集群就已经自带着的,那这里面我们的端口是什么呢?有一个rest访问端口8081,所以这里如果我们直接启动集群的话,你直接就可以访问它的8081端口,然后去,诶看到我们当前的这些状态了。
19:26
这个都是没有问题的。啊,前面关于这个容错,大家看到有一个放开的一个特别的一个这个配置项啊,这个是在1.9之后新增的一个,这个需要给大家说一句,就是这个东西叫做draw managercution点呃,Feel over strategy,就是说这是什么呢?这是呃故障恢复的时候的一个策略。这里边配置默认配置是什么呢?Region region是什么意思?就是按照区域性去去恢复,那这个是啥意思呢?就是之前如果说我们这里边配置了这个,比方说你有这个拆point的一个检查点,对吧?那大家会想到故障恢复,呃,那那很简单嘛,发生故障之后,我把整个应用停掉,然后从那个检查点读取之前的状态,然后再重新启动嘛,重启一遍就完了,但之前这个状态呢,就相当于是要把所有的任务都停掉,然后所有的任务重新启动。
20:24
哎,那现在这个1.9之后有了这个配置,这就相当于什么呢?就弗link底层帮我们自动做分析啊,就是我去判断啊,就比方说我当前有很多这个不同的任务,对吧?呃,上上游下游有很多这个不同的任务。我可以去判断。就是比方说当前比方说这个任务挂了,它到底是影响到了哪些任务,那么我现在就是把啊这这个当然不是这样啊,就是你如果在我们这里边只有一个并行的这个任务的话,那他挂了的话,肯定相当于你这个得得重新来了,是吧?啊就是有时候我们是比方说并行的这个任务啊,这下面这个挂了,那如果它只影响我下面这一条分支的话,我就只把它相关联的这条分支相关的那个任务重启就完了,上面呢,诶不用重启对吧,该处理继续处理,这样的话,高可用的这个,呃,这不能说高可用啊,这这里边没有配高可用,但是大家会发现我们当前整个这个,呃,集群资源的这个利用率就会更高,对吧,你这里边这个没出故障的那些集群,呃,那些机器就还在运行着,所以这个就相当于是一个优化,大家做一个了解就可以啊,这就是关于我们这个配置里边的东西,当然还有一些高级的一些配置了啊,就是比方说我可以定义我们当前。
21:43
这个做呃,IO操作集群的那个临时文件夹放在哪里,一般情况默认就是放在那个temp下边,所以大家如果想要去清空一些呃目录啊,或者说你想找一些它对应的那些数据的话,可以都到那个temp目录下去做呃查询啊,那另外还有一些涉及到就是当前的一些安全性的一些配置啊,这这些大家就是感兴趣的话,下来之后自己可以看一看啊,还有这个keepper相关的一些安全性的配置,这就是关于这个配置文件啊,里边主要其实大家关心的就是通用配置common这里边的这几个。
22:19
啊,所以接下来我就不改了啊,我直接用这个默认的情况给大家启动来试一试,好我先退出来,好,那接下来我们就直接按照默认的配置项去做一个启动,那怎么去启动呢?非常简单,用并bary目录下边我们知道全是命令嘛,啊那这里边我要怎么启动呢?看到有一个命令叫做start cluster,这就是启动集群啊,所以如果这里边我们想要去直接在三个模式下啊,直接去启动一个flink集群的话,我们就直接去调用这里的这一个命令,诶直接去起就完事了啊,所以说其实非常简单啊。
23:03
好,我们看一看这里边起起来之后是一个什么样的效果啊,大家看这个已经起起来了,然后我们能看到它起集群的过程当中,其实是主要起了两个进程对吧,而这里边一个是什么呢?一个叫做3LO session demon对吧。然后另外一个叫做task,呃,Executor demon啊,所以大家这个直观的一看的话,就能想到是不是一个应该对应着我们那个job manager对吧,另外对应着一个task manager,哎,那有同学可能会想到你这里边这个task manager为什么只有一个呢?或者说你这个一个是在哪里边配置的呢?我们之前在这个yam文件里边没有见到有task manager数量的配置啊。诶,这个文件这个配置是在大家看一下,就是在。com复目录下边,当时给大家说到还有两个重要的,一个叫做masters,另外一个叫做slaves,对吧?啊,那所以这个如果你你看一下这个masters的话,它里边的内容就是当前job manager的RPC的那个主机名和端口号啊,但当然这里边不是RPC通信的那个端口号啊,这里边是我们大家看8081是你做,呃,就是我们做那个网页访问的时候给定的那个端口号,我们这里边指定的是8081,然后接下来我这里边直接就cat一下吧,K slaves我们看一下,因为这个master大家对应的是那个照manager嘛,那这里边slaves当然对应的就是干活的人了,Task manager大家看里边就一个主机名叫做local host。
24:39
啊,所以大家会想到,如果你要是配一个,比方说多个task manager节点,怎么去配呢?你可以参照文档里边的这个做法,哎,你直接把这个s slaves文件改成自己想要的,比方说你叫哈杜OP2,哈杜OP3对吧?呃,把这个文件做一把这个主机名改在这个里边,然后诶,那就是注意还得怎么样呢?你对应的那些机器里边必须得有fli对吧?啊,所以你要把那个flink分发给其他的机器,然后直接你就在当前的这个task manager这里边直接去执行启动start cluster就可以了。
25:15
然后接下来你就可以看到就是当前的这个task在啊,这里边就会多多出来一个啊,那执行完了之后,如果你去看一下这个,我当前只有这个本机啊,所以就直接GPS啊,大家如果要是多机器的话,你就哦,对吧,就看所有的,那这里边我们看到有一个进程叫做stand loan session cluster enry point一个入口点啊,那当然就是提交job的时候,入口点了,这个当然就跟job manager相关了,那另外还有一个呢,叫做task manager run对吧,启动这个task manager的这样的一个啊,所以这就是我们说的啊,每这个job manager和task manager大家可以认为近似的,就是我们运行过程当中就是一个GVM进程,好,那这个起起来之后,我们接下来其实就可以直接在网页里边去访问了,对吧,Local host8081,然后大家就可以直接看到当前集群的。
26:16
的一个状态啊,你可以看到当前可用的task slots是一个,然后呢,呃,Total总共是一个,然后task manager是一个啊这些都写到这里对吧,当前运行的job呢,零个没有对吧?啊,然后已经完成的和已经取消的这个失败的都没有,都是空的,下边就是正在运行的这个job的列表。好,这就是我们整体的这样的一个,呃,集群的部署的一个一个状态啊。
我来说两句