00:00
好,大家对flink已经有一个整体的认识了,那接下来我们就主要是要来讲一讲代码里边到底怎么写怎么用了啊,所以第五章我们主要讲的就是flink里边的流处理API,我们主要重点放在这个data stream API上,Data set的话,其实跟这个基本上都是比较接近,比较类似的啊,大家感兴趣可以下来之后自己再做一个扩展,那首先这里面我们要看到的就是流水API里面到底分成哪几类呢?之前其实我们讲运行架构的时候,大家也发现了,Flink程序是不是整体分成三部分啊啊,前面就是source读取数据源,然后后边transform做转换计算,最后think做一个输出,写入到外部系统,那在这个之前其实还有一步操作,我们前面没专门提,现在专门提出来,对,因为你要写一个flink代码的话,是不是第一步其实还不能直接读取数据源,因为你必须要有一个对,必须要有一个执行环境啊,所以我们第一步其实是创建执行环境,对吧?啊,所以接下来我们先看一下这个环境是怎么创建的啊,在代码里面大家发现其实非常简单啊,就是当前这个执行环境其实就是表示。
01:15
执行程序的上下文对不对啊,这跟Spark里面的那个Spark contacts是非常类似的啊,啊,那这里边就分成两种情况,我们本身调用的时候非常简单啊,直接就是大家还记得吧,批处理里边是不是直接execution environment.get execution environment对吧?如果是流处理的话怎么办?哎,对,Stream execu environment.getcu environment,所以这个都非常简单啊,直接get拿到就完事了,就一一行代码,但其实底层大家想一想是应该有所不同的,对吧?底层的话,你想如果我在这个开发环境里边,Idea里边直接运行这个代码的话,我当前的执行程序的上下文和我直接提交到生产环境弗link集群里边这个上下文能一样吗?显然是不一样的啊,甚至大家其实还记得就是我们在开发环境里边默认的那个并行度都不一样,对吧?因为你根本没有配置文件嘛,集群环境里边你有配置文件,可以去取它对应的一些配置项,那开发环境里边相当于我只是在本地有一个多线程的这个这个呃,程序模拟了一个flink的集群,对不对?哎,所以这个环境是完全不同的,所以大家注意啊,其实flink底层是用get execution environment,帮我们把这个不同的集群环境。
02:38
相当于是已经做了一个封装,对吧,他会底层帮我们判断当前到底是本地的执行环境,还是就是远程的一个生产的这种集训环境。啊,那当然这个除了基本的做这个获取执行环境之外,我们是不是还可以去设置一下它的。啊,做一些环境里边的设置对不对?哎,我们最基本的就是可以en nv去配置一下并行度,大家还记得代码里边env可以直接set parallelism,那或者呢,我们是不是如果是集群就是远程的啊这种开发的,呃呃生生产环境的这个集群环境啊,也可以在默认的配置文件里面去做一个配置,对吧?啊这些都是我们前面已经讲过的,那这里面需要大家再多了解一下的是,如果我真的要单独指定。
03:31
本地执行环境,或者一个远程的生产执行环境,怎么样去指定呢?底层其实是有这个API的啊,大家看我可以指定,比方说我现在都是流处理程序啊,Stream execution environment,还有一个方法叫create local environment。这样创建的就是一个本地的执行环境,对吧,这就指明了我当前就是本地模拟一个多线程对吧?啊,就是有有好多的线程,假装我现在有这个job manager,有task manager,然后构建这样的一个集群啊,然后去啊。
04:07
接下来去执行我对应的任务啊,那这里边呢,默认这里边可以有一个参数,这个参数是。就是当前本地执行环境的默认并行度对吧?啊,那如果说不设置的话,就是以当前的CPU核心数为准,对吧?啊,这就是本地执行环境,那远程执行环境呢,它调用方式就会有所不同,这里边我用到的就是create一个remote environment,然后这个参数就稍微多一点了,大家看它有三个参数必须要指定当前的。Job manager的RPC通信的那个host name,另外还有port端口号,对吧?啊,大家看其实就是我们在,呃,就是集群配置文件里边,是不是做的那个基本的通用配置的前两项啊,对吧?Job manager host name和6123这个RPC端口号,另外还有一个就是。
05:01
炸包的那个路径对吧?把这些都要指定啊,所以大家会发现你如果要是直接在代码里边这么去指定这个环境的话,显然是不太方便的,我们在idea里面做开发,做测试,你先得定义成create local environment,然后我如果要打包提交到生产环境的时候,是不是还得改代码啊,我还得得把这个改成这玩意儿对吧?啊,这个又显然是非常的不方便啊,所以弗林把这个做了封装,我们直接使用的时候非常简单,直接get execution environment就可以了,对吧?这就是我们这个关于开发环境的这一部分内容。
我来说两句