00:00
那我们就准备开始理论联系实际,给大家用flink做一个具体的项目,那当前我们这个项目的名称叫做电商用户行为数据分析,所以大家其实看通过这个例子也看到了我们当前的项目背景是。电商平台,然后我们要做的呃数据,数据来源是用户的行为数据啊,那我们主要就是基于这个用户行为数据要做一些分析处理,统计计算对吧?啊,这就是我们当前这个项目的主体需求,那么当我们这个这节课主要给大家要讲解的主要就是这些内容,首先我们先来回顾一下。批处理跟流处理,先做一个整体架构的回顾,也也算是一个复习了,然后呢,接下来我们分析一下当前这个应用电商的用户行为,分析到底需要处理哪些数据,到底能做什么事。然后接下来我们还需要对当前的数据源做一个解析,就是看看我们能够收集到的数据是什么样子啊,那我们可能主要就是都是一些测试数据源了啊,到时候给大家看一看数据结构,最后呢,就是当前的项目做一个项目模块的划分,后边我们还会挨个啊把当前的这个每一个模块里边的需求都给大家做一个简单的介绍,而且还会重点分析一下第一个需求的一个实现思路,这就是我们这节课的主要过程,主要流程啊,呃,那当然了,这里面没有涉及到就是项目的架构。
01:28
大家会想到,对于这个我们当前这个数据处理而言,整个架构应该是什么样的呢?哎,其实那那就是要看当前到底是要做。到底是要做批处理还是流处理,到底是要做离线还是实时啊,这个其实所有的这种架构跟我们之前讲到的大数据项目的应用都是一样的,对吧,所以这里边并没有特别的侧重讲这个啊,首先我们来回顾一下批处理跟流处理。那这里边列出来的大家看,这就是可以说是我们大数大数据处理框架里边的代表作了,经典之作了啊,左边大家看哈杜Spark,这就是批处理的代表作啊,那Spark基本上就是现在我们的业界标准啊,一个批处理的巅峰,然后右边呢。
02:16
这就是我们所谓的流处理的代表作,Storm的话,大家知道这是相当于第一代流处理器啊,早期的一个流处理的先行者,先锋,那么flink呢,可以说是到目前为止福Li流逝处理里边的一个极大成者,也可以认为是现在流处理的一个巅峰啊,啊,这就是这两部分内容。那么大家知道批处理跟零处理最大的差别是什么?其实就是它整个底层架构就不一样,对吧?就我们说的这个世界观就不一样,就是批处理里边它是把数据要全部收集齐,数据是一个固定大小的集合放在这儿,然后开始去做统计计算,而流处理的话是不会等数据,对吧,数据是连续不断的来,不停的来,然后来一个就处理一个,诶,所以从时效性上来讲,一般批处理是用在呃,这个离线处理对吧,而流处理可以用在实时处理上。
03:10
好,那接下来我们再给大家总结回顾一下啊,批处理的最主要特征,它其实就是可以用来操作大容量的静态数据集,对吧,然后计算完成之后,是不是就返回一个最终的结果啊,返回一次就可以了啊,那么它的主要特征主要就是邮件,哎,我们说这个批注里需要考虑的这个数据集就是有限的嘛。对吧,你不可能说这个数据还是无限不停扩充的啊,不管是多大在海量,最后也是有限的,然后还有就是持久,我们这里边做批处理的时候,数据通常是会有一个持久化的存储空间,对吧?啊,然后我们可以当然大家知道Spark我们做处理的时候是要读到内存里面,对吧?是做这个内存计算的啊,是有这个RDD的,呃,那么另外还有一个特点就是大量。大家这里要注意一下,批处理是处处理极为海量数据集的唯一方法,也就是说假如说我们这个数据数据量啊大特别大,大到我们当前的这个计算处理能力就根本搞不定对吧,你扩充这个,呃,当前的这个平台资源,我们扩充集群,最后还是搞不定,那大家想那怎么办?
04:21
那是不是只好你先等着,然后等到一段时间之后,数据齐了,我们再统一做一个计算啊,因为你即使实时处理,是不是根本也处理不过来啊,你的计算能力达不到嘛啊,所以大家就会发现了,对于超级海量的数据啊,最终可能就只有去做批处理了,这个也没什么好方法。所以在这个呃,就是并行并发量啊,处理的这个数据量上,这个级别上来讲,Spark还是明显有优势的,那另外我们对比就看一下这个流处理了,流处理的特点就是实时计算对吧?啊,就是随时进入系统的数据随时进行计算,那么它不需要对整个数据集进行一个完整的操作,因为我是来一个处理一个嘛,所以我相当于可以处理的这个数据集呢,是一个无界的对吧,无边界的这样一个无穷无尽的数据流,那么它的主要特点就是说。
05:16
确实它是可以处理无界数据的,但是呢,同一时间是不是我就只能处理一条数据啊,当然这是针对每一个这个任务而言的啊,每一个每一个县城而言的。呃,大家想到就是这样对吧,那我要通过它做一个并行的扩展的话,是不是就只有用这个分布式架构了啊,所以一般就是这样的啊,就是分布式扩展,同一时间都只能处理同一条数据,那不同的数据在不停的来呀,他们之间有什么关联呢?他们之间的关系又怎么样去?呃,保存下来,维护起来呢?诶,那就是维持少量的状态对吧?这就是所谓的有状态的流处理,那另外流处理还有一个主要特征就是基于事件。大家回忆一下我的那个link代码提起来之后,Env.execute执行起来是不是就等着了,对吧,如果说我们不是读取这个比方说。
06:09
文件读取数据,那么大家知道这个文件读取完了之后,它是不是直接就退出了,那如果我们真的是一个流式的输入,如果是卡夫卡或者so文本流的话,是不是它永远等待啊,除非我们手动停对吧?啊,所以它就是一个呃,基于事件触发的啊,时刻在那里等待的一个状态。另外还有就是实时性非常好,处理的结果是不是来一个处理完了之后立刻就可以返回啊,不需要等待我们所有的数据都便利完成之后啊,对吧,攒着数据到齐之后再去做处理,这就是这个流处理的主要特点啊,大家可以就是把我们之前讲的内容先回顾一下。
我来说两句