00:00
我们了解了flink的基本运行架构,那自然就会想到了之前我们在idea里边直接去运行这个代码的时候,诶,这到底是怎么样去生成这个集群环境的呢?哎,那当然就是idea帮我们把这个集群环境模拟出来了,就是用本地的多线程模拟了一个集群环境。那自然我们就想到在真正的实际生产环境里边,那就不能这么去做了,我们就必须要真正意义上去启动一个flink集群,哎,那这就是我们这一章所要做的事情,就是要做flink集群的部署。所以首先呢,我们就来先做一个快速的启动集群的过程啊,首先我们介绍一下当前的环境配置吧,呃,因为我们知道flink是一个分布式的流处理框架嘛,所以我们是要搭建集群,我们在这里呢,准备了三台Linux机器啊,这个之前我们在学习大数据的过程当中啊哈杜Spark应该都是有这样的一个集群环境的,可以直接拿过来用啊,比如说我这里边的一些环境配置呢,是这样的。
01:04
当前安装的Linux版本是三套7.5,然后安装了JAVA8和哈杜op,哈杜呢建议选择的版本是2.7.5以上,我这里使用的版本就是哈度2.7.5,然后另外就是还有一些常规的要求了,需要去配置当前集群节点服务器时间同步,而且还要配置免密登录,另外关闭防火墙,保证集群节点之间的互联。那当前我的虚拟机里边所配置的三台机器呢?IP分别就是102 103 104,对应的主机名那就是哈杜普102,哈杜普103和哈杜普104,啊,那这都是之前我们在搭建哈杜普集群的时候已经创建好的虚拟机,直接就可以用了。所以接下来呢,呃,我就直接使用这三台主机来进行一个测试,那其实对于弗link来说啊,最简单的启动方式呢,呃,其实就是不用搭建什么集群啊,我们知道一台机器也可以构建集群嘛,那其实就是一个单节点的本地启动啊,这种部署方式,我们往往就把它叫做本地部署或者叫做本地启动啊,这种方式呢,一般就是用来做一个测试啊,不需要任何配置,直接就可以起起来,当然了,前提是我们应该要下载flink的安装包,然后把它解压出来,然后执行一个命令就可以把它启动啊,那我们当前的这个安装包呢,主要就是。
02:34
进入到flink官网里边,在它的download页面下面就可以去下载对应的版本,我们当前下载的版本是flink01:13点零,后边跟着啊SC2.12.tjz这样一个压缩包。如果大家现在到官网上去下载的话,应该会发现啊,目前最新的flink版本已经更新到了01:14点四。当然了,我们说,呃,当前你如果到gith上去看的话会发现啊,Flink的01:15点零也已经有了好几个candidate,也就是候选版本啊,那相信不久很快就会发布flink的01:15版本了啊,所以这个版本更新还是非常快的啊,我们这里边直接使用flink01:13点零,用一个之前的稳定版本就可以了,接下来我们都是基于这个版本去做讲解的。另外还有就是前面我们提到skyla的版本用的是2.12,如果我们到对应的那个下载页面的话,你会发现还有2.11的下载版本啊,这个不要下载错了,下载好了之后呢,接下来我们当然就是要去做一个解压了啊,那现在我们先看一下啊,当前我的下载安装包放在哪里了呢?啊,主要是放在了。
03:46
当前OPT目录下的software下面我们看到就在这里有flink01:13点零并scale2.12.tjz,所以接下来我就需要把它做一个解压缩,解压到啊某一个目录下边去,我这里希望解压到的呢,是OT下边的有一个叫做modu目录,哎,那所以接下来我就。
04:09
输入这样的一行命令,直接套可以加上一些参数啊,告ZXVF,我们可以解压缩,而且有一些可视化的展示,然后后边当然是跟上当前的TJZ压缩包,后面再跟上到大C指定。压缩到的目录。诶,那这样的话,我们就可以看到解压缩的这个完整的过程啊,很快就已经压缩完毕了,接下来呢,我们就可以退到对应的目录下面去,现在就多了一个叫做flink01:13点零的目录,哎,这就是我们接下来啊,所有flink的内容就都放到了这里。所以我们可以直接进入到这个目录当中去,接下来我们所有执行的操作呢,就都是基于当前目录去进行的。在这里我们可以先看一下link解压缩之后啊,里边到底有哪些目录结构,我们可以看到这里边最关键的其实就是这样几个目录,一个并,并我们知道是binary的前三个字母,也就是说在这里边都是一些二进制文件,可执行的文件,所以我们之后啊,如果要去启动当前的集群,或者说想要通过FNK去提交作业,都是用并下面的命令来执行的,我们可以大概的看一眼啊。
05:30
看一眼并目录下有哪些东西,诶,我们可以看到这里面有什么呢?啊,比如说有一个非常精炼的一个命令,就叫做弗link,后面我们想要提交flink作业的时候,就是使用这个命令啊,那当然了,另外还有比方说link can啊,比如说link demon,那另外呢,还有对应的跟K8S相关的一些命令,跟雅恩相关的一些命令,另外呢,还有单独的task manager以及job manager对应的一些脚本命令。
06:01
另外,我们还看到跟集群有关的一些命令,启动集群,还有停止集群等等。所以我们就会想到所有执行的命令都到并目录下边来找就可以了,那除此之外呢,后边还有一个目录叫做CF Co,哎,那我们知道这是configuration的一个前四个字母,也就是配置,所有配置项,配置文件都在这里,我们可以看一下下面有什么东西呢?诶,这里边最重要的一个其实就是这里的flink com点压ma,这是一个压文件,好,那另外其他还有一些就是log forg啊,这是跟日志有关啊,Log back,这也是跟志有关的,另外还有呢,呃,比较重要的就是一个masters和workers,这个可以看的很明显啊,Masters当然指的就是当前的。管理者了,主人嘛,啊,那另外还有workers workers当然就是指的当前干活的人了,所以对于我们当前这个集群里边的job manager和task manager就可以通过这些配置文件去单独指定,那前面这个link com点里边呢,就有很多我们基本的一些配置项,比如这里我们可以进去看一眼。
07:14
看一下comlink康键yama文件里边到底有哪些东西啊,那ya文件这个特点啊,我们可以看到它其实就是一个K,一个value这样的一个表达啊,就是K后边加一个冒号,加一个空格,后边跟着它对应的值,我们看到最主要最基本的其实就是这里的common通用的一些配置项,我们可以看到有哪些呢?首先。这里就是job manager相关的一些配置,很显然当前集群内部都是使用的是RPC的通信方式啊,那么drop manager当然是最主要的一个核心节点啊,它是当前整个集群作业的一个管理者,那么我们首先要配置的就是它的。IP地址啊,或者说我们用这个域名也是可以的,另外还有就是它的端口号,通信的端口号,所以我们这里边默认给的就是local host端口号是6123,这是drop manager的基本配置,然后下边呢,接下来主要就是针对当前它的内存做了一个具体的大小配置,我们可以看到这里的配置项是draw manager.memory.process点。
08:24
也就是当前job manager在运行起来之后呢,它相当于就是一个process,就是一个进程,哎,所以其实啊,我们知道Li底层它不是用Java写的吗?哎,所以这里边对应的这些组件集群里边的组件啊,照manager也好,Task manager也好,运行起来之后,我们都可以把他们认为是一个JVM进程。哎,那所以当前这个GVM进程当然就要有对应的一个内存空间的分配了,哎,那照manager默认当前这个进程分配的内存大小是多少呢?1600后面的M表示兆啊,就是1600兆,那下面呢,对应的task manager.memory.process点当然就是task manager,整个这个GVM进程它所对应的。
09:17
内存空间的大小是1728兆,这里要多说一句的是,下面我们看到助调的还有一个可选的配置项,叫做task manager.memory.flink.size。它的大小要小一点,默认是1280兆,诶那它们两个的区别在哪里呢?呃,其实看的很明显啊,当前这个是task manager作为一个JVM进程整个所占用的内存空间,那这个进程呢,有些可能是flink框架内所占用的内存,那还有一部分呢,就应该是作为一个JVM进程本身所有的开销啊,就像一些原数据的保存啊,诶,那对应的下面这个task manager memory fli size呢,那就是不包含GVM进程的那些基本开销了。
10:07
啊,所以对应的就要比它要小一点,所以这个我们也比较好理解啊,一般情况哎,你看我这里边,它其实也本身给我们注掉了啊注注释了一句。这里也给我们注释提醒了一句,就是并不推荐同时设置上面这一项和下面这一项,只要设一项另外一个就会有一个对应的比例给我们自动的补全啊,那所以这个一般情况我们只要配置上面这两个就可以,然后再看下面还有两个比较有趣的通用配置项,一个叫做。Task manager.number of task slots,诶,这个是什么意思呢?呃,这里面又涉及到了一个新的概念,叫做task slots task我们前面知道了啊,就是任务,就相当于是我们在程序里面拆分出来的流水线上的每一步操作,那什么叫做它的slot呢?
11:03
Slot,我们知道有槽有插槽的意思,所以这个任务指的其实就是针对每一个具体的任务给他分配的可以执行的系统资源,哎,所以当前这个其实是针对可用的系统资源的一个具体的分配。诶,那这就是当前一个task manager上到底有几个任务槽啊,那我们可能会想到这样一个任务槽,它代表了一个什么含义呢?简单来说,它就代表了。我们当前一个task manager能够并行的执行多少任务,诶,也就是说一个任务就理论上来讲就应该放在一个槽里边去进行执行。那当前这个数量默认是一。相当于一个task manager就不能行执行任务,那如果说我们把它配置的大一点的话,当前一个task manager就可以并行执行多个任务。
12:02
这就是任务槽的一个基本概念啊,然后后面还有一个配置项叫做。Parallelism get default。Parallelism,这就是所谓的并行度,前面我们说过啊,衡量当前一个分布式运行的程序,它的并行程度的概念在弗link里边就叫做并行度,这就是默认并行度,给的也是一,哎,那我们看起来前面这个插槽的数量好像看起来也是跟程序并行执行有关,后面这个默认并行度也跟程序并行执行有关,那它俩的区别又是什么呢?后面我们会详细去做介绍,这里可以简单的提一句,就是这里的并行度指的就是真正运行时候,我们到底这个任务怎么样去并行,它的并行程度到底是多少,而上面的这个插槽数量呢?诶,那是当前task manager可以并行的能力,也就是他静态的啊,有多少个槽,但是呢,未必会占用。
13:05
啊,这就是一个简单的介绍,那当然了,后面还有很多被注掉的一些配置项,比如说下面我们看到高可用ha相关的一些配置,哎,我们现在默认当然是没有打开的啊,下面还有for tolerance。容错机制以及checkpoint啊,Checkpoint这是一个非常重要的概念,叫做检查点,那检查点主要就是用来做这个容错机制的保证啊,那这一部分呢,如果我们要配置,也可以把下面的一些东西打开。另外呢啊,还有涉及到比方说这个rest和web前端,诶,这就涉及到我们当前呢,可以为集群管理提供一个可视化的web UI页面啊,比方说这里面我们默认的,诶,这个端口号就是8081啊,那后边我们启动这个集群之后,就可以通过这样一个端口可视化的进行访问啊,那在下边呢,还有一些就是高级的一些配置项啊,那关于后边的容错机制啊,我们在后续的章节里边都会介绍到,这里边最主要的配置项,其实就是前面common里边的这六项。
14:11
我们只要把这个做一个基本了解就可以。这就是关于link co.ya某这个配置文件里边的一些主要内容。啊,那除了并和。com这两个基本的目录之外,后边的一些呢?诶就比较简单了,比方说examples官方给我们提供的一些应用的案例啊,那另外lib下边啊,我们知道leap是library的前三个字母,那里边当然就是我们当前的一些库,一些依赖包了啊,那后面还有这个license啊,另外还有log,我们的日志文件都会放到这里,还有一些插件啊,这些我们一般用到最多的啊,需要去更改,需要去考察的主要就是前两个并和cos。那现在我们就已经有了一个整体的了解,那接下来我们什么都不改,如果说就想在当前的本地。
15:05
做一个本地单节点的部署,能不能启动一个flink集群呢?当然是可以的,我们直接去执行并下边的。我们还记得有一个start cluster,这就是启动一个集群的命令,我们直接敲这个命令就可以了。我们可以看到这里有提示它在启动一个集群,然后呢,哎,在当前节点哈豆102上面启动了一个stand alone session,哎,这个指的就是我们当前独立集群的一个绘画的进程,然后呢,另外还有一个task ex executiveor啊,也就是当前任务的一个执行者,也是在前哈杜102上去进行执行的,那所以我们就会发现啊,其实我们就是在哈102自己这里又启动了一个drop manager,又启动了一个task manager,构建了一个最简版的集群啊,我们可以GPS看一下当前已经启的一些进程啊,那当然了,这里边因为我是启动了洛op的呃,相关的一些程啊,所以我们看到有这个data no not,这个我们就不管了,那刚才启动的这两个主要是什么呢?就是这里的stand sessionster ENT point。当前集群的一个入。
16:21
口点,那那我们知道如果要去提交作业的话,显然就要通过这个入口点去提交了,另外还有一个就是task manager,这是我们真正执行的那个task manager。那么对于我们当前这个本地集群配置文件到底是在哪里配的呢?其实前面我们也已经看到了啊,就是在。com下边link ya里边,首先这里边定义了drop manager local host 6123,这已经定义好,但是我们看到task manager没有定义啊,Task manager是在哪里指定的呢?哎,这个我们要找到K下边的masters和workers,这是真正指定我们当前集群的不同角色,不同组件的这两个配置文件,哎,所以我们可以看一下。
17:10
Masters。我们看到里边就是local host 8081,我们没有改过,默认就是这样,诶,所以当然了,对应的啊,我们当前的这个job manager就是local host,也就是哈多102,那么后面的8081是什么呢?就是我们当前提交作业web UI的那个对应的端口,所以之后我们可以直接访问这个,然后另外。还有一个就是当前的workers。我们可以看到它也是local host,所以呢,我们当前这个哈通102起了一个集群,那其实只有一个单节点,它既是装manager又是task manager,这就是我们当前的这个状态,当然了,启动之后我们就可以直接到浏览器那边去直接访问哈杜102的8081端口,然后我们就可以看到flink给我们提供的这样一个自带的可视化的web UI了。啊,那在这里我们可以看到overview当前可用的task slots是多少,我们说这就代表了当前可用的资源吧,当前可用的是一个。
18:16
为什么是一个呢?啊,因为其实我们知道,因为当前task manager只有一个,而且呢,我们在配置文件里边指定的一个task manager只有一个slots,那当然总共也就只有一个了,另外这里还显示了正在运行的作业以及完成的或者取消的失败的作业各有多少个,那下面呢,是正在运行的作业的列表drop list,那当然了,现在没有任何的正在运行的作业啊,下面我们看到又有一个菜单,是跟作业相关的,当前正在运行的和已经结束的,然后下面呢啊,还可以看到当前task manager和job manager的相关信息啊,在这里其实我们看到啊,点开可以看到task manager这里边非常具体的一些配置的参数。
19:04
前面我们不是看到了task manager,它的内存配置主要是一个叫做task manager.memory.process.size吗?哎,那在这里我们可以看的非常的明显,什么叫做task manager它的process.size呢?哎,那这就是整个这个total process memory。我们所定义的total process memory就是包含了这里所有的一切。那当然了,对应的有一个比较小的范围,那是这里的total flink memory,这就是我们所说的在配置文件里边另外一个选项task manager.memory.flink.size那这里边呢,就不包含当前JVM进程本身所有的一些额外的开销啊,那只是跟弗link相关的一些内容在这里啊,那当然了,对于一个GM进程而言啊,它所占据的内存空间整体来讲是可以分为JVM堆内内存以及堆外内存两大块儿的两大部分的。
20:10
啊,这其实就是所谓的flink内存模型,主要一般我们指的就是task manager,它整个每一块内存的划分,我们一般配置的呢,配置的就是要不就是最外边整个的这一块total process memory,要不就是红框框起来的total memory。这就是关于我们之前一些配置项的进一步的解释,那job manager这边呢,跟他manager基本是类似的,只不过呢,因为它不运行具体的作业嘛,整体来讲内存模型也就会稍微的简单一点,最后还有一个submit new drop,哎,那我们就知道了,如果想要提交一个作业的时候呢,就可以直接在这一个可视化的UI界面上,在这里直接去做提交。这就是关于本地直接快速启动一个flink集群的过程啊,通过这个例子,其实我们也已经知道一个flink集群到底长什么样子。
我来说两句