00:00
好了,同学们,我们之前呢,把SPA史疾病的一些基本的原理呢,包括简单的使用呢,给大家介绍完了啊,嗯,其实呀,如果你能搞明白它和RDD之间的关系的话,你就会发现它其实就是数据源发生了改变,对吧?呃,把那个我们以前的文件呀,包括内存中的数据呢,现在转换成我们的流式数据了,就是数据在源源不断的过来,然后呢,通过采集器呢,把它封装成一个一个的RDB传了过来啊就这样,所以呢,也就是说把这个搞明白之后,那其他的那不就相对来说好理解了嘛,对不对,都就是RDD的操作呀啊,只不过里面涉及到一些状态啊,包括窗口啊,包括一些关闭啊这种操作啊,这个呢,我们理解一下,我觉得就没问题了啊,所以咱们前面的讲解呢,就告一段落,接下来我们给大家讲一个案例实操啊,就是看看我们十八十追命,我们具体在工作当中如何来使用,怎么去用它来完成咱们的需求啊,这是我们接下来要给大家做的,那么首先第一个我们要把环境。
01:00
准备好,要把数据准备好,所以啊,我们的第一点,同学们看,我现在呢,来拷贝,我先把咱们的这个地方写上个幺零啊,幺零我们这去掉,嗯,咱们写上叫market data,我们用来生成模拟数据,因为我们这个跟前面不一样,咱们前面的都是一些离线数据啊,咱们事先准备好一个日志啊,准备好一个文件啊,包括一些数据准备好都是OK的,可是我现在是流失数据处理的话,这个数据就应该是动态生成的,那你就没有办法去提前准备好了,对不对,所以啊,咱们这里呢,通过应用程序来模拟数据啊,同学们来。来把它放过来,所以呢,我前面的这些地方呢,我看一看啊,咱们都这个地方我先去掉吧,啊咱们去掉吧,嗯,去掉以后呢,我写上来,咱们写上叫做生成啊我们的模拟数据,那你生成模拟数据的话,我们该如何来生成呢?对不对,首先我们来打开。打开我们在这边,我们点一下啊,咱们点一下来点一下。
02:04
好了,那么我们生成模拟数据的情况下,那我们首先要想一想,我们生成什么样的数据,我们接下来给大家演示的这个需求啊,跟我们之前的那个广告是很像的,比方说我们在指定的时间对某一个省份的某一个广告进行了点击,对吧?还有我们会有这样的数据,所以呢,在我们的这个生成当中啊,它有这样的一些东西,咱们叫做什么呢?叫时间戳,还有呢,我们的省份啊,咱们的这个城市。啊,咱们的城市还有用户和那个广告,那我们说了,在某个时间点,某一个省份,某个城市的某个用户对某个广告,他点击了一次,这个数据就会被采集到,那么当多个数据采集完成以后,咱们可以做汇总啊,做操作,所以这是我们需要给大家去讲解的啊,但是呢,我们这个生成的数据你往哪推送啊,对吧?你生成的数据的推送啊,那咱们给大家采用的结构呢,就是我们的呃,应用程序叫OB,咱们把数据给它生成一下,然后呢,把它推送到我们的卡夫卡当中,然后再我们通过Spark。
03:10
咱们的streaming,哎,给它采集过来,然后再做我们的统计分析,对吧?哎,咱们是这样的一个过程啊,所以呢,我们现在写的程序呢,就是这一块叫application,那么你要向卡夫卡中去做的话,那首先我们得跟卡夫卡交互,对不对,那我们得把依赖关系给它增加,好来咱们看一看咱们这里的增加关系呢,我看看啊,这个call咱们有了史stream有了,卡夫卡有了,嗯,德鲁伊,咱们这没有啊,这个德鲁伊呢,是我们的数据库的连接词,那么我们要给大家演示的,会把一些统计的结果放到MYSQL数据库当中,因为咱们别的什么red那些还没有去讲,所以我们这里呢,先给它放到我们的MYSQ当中好不好,同学们。来,那我现在呢,就把这个呢,给它加到咱们的泡沫文件当中啊,咱们打开,打开以后在我们的这个位置给它来啊,咱们增加一个叫德鲁伊啊的一个依赖,然后下面是买circle的驱动,这个没问题,还有我们的杰森啊,它的解析的一些内库,这个都没有问题啊呃,接下来呢,它会有一些工具类,这些工具类呢,其实是从从那个配置文件当中取一些基本的配置参数,这个我觉得倒是无所谓啊,就是我们这个可以用也可以不用,这个倒无所谓,所以我们暂时怎么简单怎么来啊,以后慢慢封装的话,咱们可以把它封装成一些我们的工具类,暂时咱们先不用它了好不好,然后接着往下,下面呢就有一个实时数据生成,那么这边就会有个配置,它这个配置呀,是把买SL的一些连接配置呀,包括卡夫卡集群的地址呀,都给它写上了,这个对于我们来讲倒没有那么重要啊,然后呢,我们接着往下往下。
04:50
呃,下面呢,咱们在这个位置,大家会发现它其实啊,就是我们准备要生成的数据,这个呢,我们可以拷贝一下,那我们要生成的数据呢,其实就是这个样子啊来翻过来,他说了格式啊,然后呢,我们写上这个叫含义吧,啊咱们叫含义啊好,这个呢时间戳,这个是我们的省份啊,这个是我们的城市,这个是用户,这个叫区域是吧,咱们叫省份可能还不太合适,咱们应该叫区域啊,咱们叫区域啊就是这样。
05:20
那么它们中间是用空格隔开啊,用空格隔开,所以呢,我们现在呢,先不说别的,你得先把数据呢给它生成了,所以我们这里写上啊来咱们叫DF,嗯,咱们就叫market好了,那么我们现在呢,叫返回数据,但你也不能说一条一条返回对不对,那我们这里呢,可以同时生成很多条一块发过去,因为我们单位时间内,可能一秒钟之内啊,会有很多的数据过来,你也不是一条条过来,对不对,那所以在我们当前的情况下,我们可以比方说来写上一个for循环啊,这个for循环呢,在我们这里呢,我就来了啊,咱们写上一个I,然后写上一个一,咱们写上一个to,咱们30条行不行,咱们给他来一个一啊,咱们倒走30啊,就是我们的30条,我们的数据啊,就是这样那么好,那我现在呢,把这个去掉,诶我们现在准备我们写上一个,咱们在这里面吧。
06:13
呃,咱们现在的这个地方呀,30条数据,那我写上一个叫做list吧,嗯,等于list咱们的8UFF分,OK,那放过来啊,List buffer,然后在这里给他一个咱们的string就可以了啊好,接下来呢,我的list点我们叫aend,嗯,咱们叫aend,这个aend呢,按照咱们之前的来操作,咱们写上,嗯,咱们叫做system。点咱们叫这个呢,就是我们的时间戳了对吧,OK,然后呢,加空格,空格以后呢,写上一个区域,咱们这个区域啊,我觉得这个区域呢,咱们可以随便写几个啊,当然了,这个啊,咱们叫做嗯,区域的话叫华东啊,咱们叫华北是吧,然后写上一个啊来大家写个逗号,我们叫做华啊,咱们叫华东。
07:05
华东还有呢,华南是吧,咱们随便写几个啊,咱们叫做华南好了,然后这个呢,我们写上叫area啊,咱们的list斯现在呢,我们只要随机的从这个里面取一个,随便取一个就完事了,对不对,那所以呢,我们就写上啊来,我们叫做area啊,它等于我们的area list,然后点儿啊,咱们这个点啊,咱们叫做嗯,我想想。咱们直接加个括号吧,直接加个括号啊,然后呢,写上一个。咱们提示一下吧,传一个值,那传一个值的话,我们叫做new r啊,咱们叫ROK,然后点,那咱们叫做next,好,它就没有提示啊,把它加过来,咱们叫next in给这个三,哎就这么写,写完了以后,那么这个area呢,在我们这里就出来了啊,OK,翻过来啊。
08:01
好了,还有城市呢,那这个城市呀,咱们怎么简单怎么来吧,所以我们这里就叫city啊,咱们的list,那比方说北京啊,咱们写上咱们叫北京,然后呢,我们写上啊,咱们叫上海,然后呢,我们叫做深圳啊,咱们叫做深圳,好把这个呢,我们拿过来,咱们写上一个叫city,好把这个呢,我们放到这边,哎,可以了啊,就意思意思,所以city放过来,好,然后放到这里,接下来呢,还有一个叫做用户啊,这个叫做用户,这个用户呢,我们在这里写上一个,我看啊不能在这写了,应该是我们在这儿随机生成了,所以我们写上叫U的ID,它等于咱们这边,嗯,我写上啊,咱们这来,嗯,咱们就叫十,嗯,写个六吧,别写太多了啊。放过来,然后还有一个叫广告,咱们的广告ID,那广告ID咱们也这么写啊,U的ID放过来Dollar,然后呢,放到这边,然后Dollar符我们再来一个广告ID好了,那我现在这么写完以后,大家可以到我现在就生成了我们的很多的字串,然后这个字串呢,我们就直接返回了,对不对,把这个集合呢就返回啊好,那我们现在呢,每一回都会产生新的,这不就OK了吗?所以啊,在我们的这个地方,我们现在就准备要向卡夫卡当中给它生成数据,所以呢,我们for循环啊,咱们这写上一个叫well true,咱们叫well true啊OK,然后呢,写上well true,然后呢里面呢写上thread.sleep也别太频繁了,对吧,我们比方说休息两秒钟。
09:37
休息两秒钟以后,这里呢,我们给它来for循环,嗯,然后呢,把咱们的直接Mo data是不是就可以了,这以来咱们的Mo date咱们写上啊,咱们叫做点点了,以后我们这里给它来,咱们叫for it,因为我们这个Mo data这个方法呀,当你执行完成以后,我们for each,你拿到的就是一个一个的字符串吧,哎,所以你拿到的就是一个一个的数据啊,咱们就叫date了,好,那你拿到以后你要干什么呀,我们写上啊,来像我们的卡夫卡中啊,来我们写上叫生成我们的数据,那你像卡夫卡中生成数据的话,那么我们得有一个叫producer对不对,我们得有生产者呀,才能像卡夫卡中生成数据啊,所以我们回过头来,咱们往这边看,同学们看。
10:27
在咱们这边有一个叫做什么呢?叫卡夫卡的producer啊,所以我们这里来拷贝,呃,我觉得是不是在上面会好一些呢?在咱们这个地方啊,有一个卡夫卡的producer好放过来啊,咱们那我现在呢,有一个卡夫卡的producer,然后这里面会有一个啊来把这个拷贝,这是我们的一个配置环境配置啊。好环境配置当中,咱们来观察一下,这边有一个叫properties,给他放过来。还有叫producer conig,那么这个broker呢,就是我们的那个集群地址了,那这个集群地址呢,我们先写一下,叫做LINUX1,咱们9092啊,就写上它就可以了啊,然后呢,把这个pop呢放过来,然后这边我觉得都没有什么问题啊,接下来往这边,那么它就是我们的producer啊producer OK,就是它那行了,那你的producer在我们这地方不就可以点我们叫send吗?你send的话,那么我们这里还有一个问题,它要send的是一个record,这个record大家可以看到来,它叫做producer record,所以呢,我们在这里呢,还要准备一下来,我们写上叫record,等于new,咱们叫producer record,那拿过来好把这个record给它放进去,那这里呢是我们的string,然后呢是我们的string,诶就这样,那么我们里面传什么值呢?大家可以看到传一个叫topic,传一个K和V这个K啊。
11:57
啊,你不传就不传了,你不传是个能啊,那么我传一个V就行了,这个V不就是我的字符串date嘛,所以说咱们传一个date,然后传一个我们的topic,这个topic呀,咱们之前不是创建了个新的吗?还记得吗?同学们,在咱们之前有一个叫做卡夫卡当中,我们这是不是有个叫艾硅谷new啊,所以拷贝拷贝以后,那我在我的这个地方不就是一个我们的topic吗?这就是我的数据,那我现在不就把咱们的producer record就准备好了吗?对不对,诶就是这样啊,好,同学们,那么我们在这个地方呢,拿过来,我现在呢给它启动一下啊,咱们这里呢,我现在确认一下咱们的进程都有什么东西来,好,还现在有卡夫卡是吧?嗯,那么OK,那我现在呢,给他来啊,咱们现在,呃,我现在先把这个关掉吧,因为这是我们之前的,这是我们之前的,那我现在呢,给他来点一下。
12:53
那我现在呢,这边我就写上GPS啊,然后呢,来把这个给掉啊,咱们的来咱们叫130啊OK,然后同样道理在我们这边也给他来Q掉。
13:09
好,我们的Q啊,咱们写上GPS好Q啊,我们的杠九把这个18466。18466,诶给它Q掉,Q掉以后这里呢,我们再来啊,咱们再再来,我看一看,确认一下,如果没有问题的话,现在呢,我们来启动咱们的主keepper啊,再来我们的卡服务卡,OK,好给它启动啊,如果都没问题的话,那咱们接下来就可以去完成我们数据的一个生产和它的消费了啊,那么我们现在呢,确认一下,咱们现在呢,While true,然后循环,循环以后Mo data,然后这里是data,然后这里呢,我确认一下它里面是new data。好了,基本上差不多,但差不多的话,我觉得咱们是不是应该先把这个注掉,咱们先,嗯演示一下这个操作呢,对不对,所以啊,我这个呢,先给它注掉吧,啊先注掉,注掉以后呢,我先来给它在这里呢,我们来print一下吧,咱们先打印一下啊咱们的print,然后把这个date呢,我先来确认一下啊。
14:12
好,我现在先执行。运行一下,看一看我们首先生成的数据是什么样子的啊,咱们再去考虑到我们如何往卡夫卡里面来放,好吧,同学们。好同学,看我们生成的数据呢,就是我们现在的这个样子,对不对啊,这是我们随便生成的嘛,所以呢,相对来说还好啊,这个ID是零,其实也无所谓啊,ID咱们给个加一其实都是可以的啊,所以呢,我想想这个是01234这样吧,把它停掉,首先数据没问题,但是我们觉得呀,这个生成的这个数据啊,这我们加上一个一啊,再加上一个一,一到六其实就可以了啊好,那这个没问题的话,现在是不是只需要我们在这边去取数据就行了,那怎么取呀,同学们看来啊,咱们来现在。
15:00
把咱们之前那个卡夫卡的数据啊,咱们拷贝过来,拷贝过来以后呢,咱们给他一个什么呢?咱们叫11,咱们叫做requirement啊,就是需求,需求一啊,需求一,因为你不管是需求几啊,我们都应该去获取数据,对不对,所以来拷贝点击OK,点击完成以后,我们来看一看,最基本的操作当中,这个都没有任何问题,他是取数据,这是打印吗?只要他能把数据打印出来,就说明我们已经取到了咱们的数据,没问题吧,同学们,所以啊,咱们现在呢,有两个操作,记住我们首先先要去什么呢?生成数据,然后SPA streaming在消费它的数据,这个我们是需要去做的,所以把这个呢,咱们的print呢保留吧,然后把这个反过来啊。好同学们,我们现在看这边,我们现在已经启动了卡夫卡和咱们的主K现在就都有了,都有了以后,咱们先把那个我们这边先给它来启动,启动以后呢,我们先得到咱们的数据,就先消费,你没生产你可以先消费嘛,只是消费不到而已,对不对。
16:09
好了,同学们,我们现在是不是已经在去消费数据了,只不过什么都没有吧?没关系,那我现在准备把这个程序开始运行,看看它能不能生产数据啊,运行。如果你生产数据没问题,你的消费数据也没问题,那整个我们的线就是通的啊。好同学,看现在是不是已经开始生产数据了,再看我们这边点一下,我们这边是不是也得到了数据,所以啊,我们现在数据和环境就准备好了啊,同学们。
我来说两句