00:00
呃,那么首先呢,咱们要想去做维度的话,那么这里有两张,一个呢是省份,还有一个呢是我们的用户,对吧?那么咱先一个个来对吧?呃,那么首先呢,我先在咱们这个菲尼格斯里边把这个表给它建起来,那如果你要想在菲尼斯里面建表的话,那咱们是不是得把我现在这个H服务是不得提起来呀,对吧?呃,那么首先呢,你要想起我们这h base的话,那咱应该是先把这个Dis对吧,这个呢给它提起来。然后呢,把咱们组keep记下来,然后我看你们有些东西还起一个什么question server是吧。你们都起了吗?哎,对,那个时候是咱们口端的时候才起的,对吧,然后呢,我现在把这个Z给它起起来。那么除了我的ZK之外呢,那我们现在把这卡普卡也一块提起来吧,然后接下来start h base这个H呢,也得提起来。
01:15
好了,那目前看一看咱们现在起的内容是吧,这个base呢,这个提起来了,然后我们现在呢,这个组keepper和卡卡啊也记起来了,那把这个写完之后呢,咱们可以通过我们的扣单工具啊去连接一下,在这里我们呢去通过我们的扣单工具,这个扣端工具昨天大家都连着了吗。啊,有没有没连上,没连上的话,如果实在连不上的话,也不用去强求是吧,然后直接就操作我们这个什么呀,就操作我们这个黑窗口就行是吧?呃,像以前呢,这里边我在使用客单工具的时候,其实我们也可以用什么,其实我们以前大家这个手里有那个deliver吧,其实如果deliver操作的话,那其实如果出问题的几率更大,对吧,就是好多端题出问题的啊,好多出问题的对吧,所以说呢,这个其实就给大家建立一个扣单工具啊,但这些扣单工具其实你们可以用一用,感受一下,它没比咱们这个黑窗好用多少。
02:13
对吧,就是我现在如果直接去在咱们的命令窗口操作我们这F吧啊,不比它差多少是吧?好,那我现在呢,在咱们这里边,那来看一看,我现在如果要想去做操作的话是吧?呃,把这字体呢,稍微改一改。改大一下。然后接下来,那么咱们现在呢,先去创建表,把建表语句呢,我直接拿过来了CTRLC,然后呢到这里CTRLV对吧?那么去改一些东西,那我现在去创建一个g ma,这呢是0523对吧,023装一对吧,那也就是说我现在呢,在我们的h base里边那有这样一张表,那么这个表里面主要有这么几个字段对吧?这个ID呢是我们主键,注意啊,你在这里看到它叫主键,其实呢,它映射到我们这个h base表里边,这个东西变成什么了,是不是,是不是K呀,对,然后接下来那么什么in for.name然后in for.every code是么?In for点什么is code,像这几个东西,Ino是不是代表代表列组的名称对吧?然后下边后面呢代表咱列名对吧?然后再往下这块呢,就是我们这个预分区的一个处理,对吧,把这个东西呢创建一下。
03:26
好了,这个表创建完之后呢,那么去检查一下啊,就是说我现在呢,是不是创建成功了,那s select的清,然后from对吧,把这个东西呢,咱们查询一下是吧?那目前没有数据,但是可以查到充分档创建的没有问题,这是第一个啊这第一个那你可以来到这里,我们现在呢,去读取我们下列数据,然后在我这里面呢,有一个表,这个表什么,这个表叫季贸0523,它是保存我们这个省份信息的是吧?保存省份信息的对吧。
04:00
好了,那么除了他之外呢,那么再往下走对吧,那么再往下走,那么再往下走呢,那么咱们来看一看省份信息创建好了,那再往下呢,咱们把用户啊也创建出来,把这个东西呢,CTRLC拿过来,对拿来之后啊,那么咱们现在在这里去执行创建我们这个用户表这语句对吧?那用户表呢,也是改一下,这个是我们的g mo0523u音O是吧,然后接下来这里边主要有这么几个字段,有什么这个ID啊,用户的级别,用户的一个生日,然后呢,用户他的一个我们的个性别,以及啊这个什么叫这个组吧,对叫组,然后还有一个什么咱们这个名称对吧,把这个东西呢,咱们给它保存过来,但是大家发现,其实我现在这里边这个这个表和我们现在数据库里的表好像不太一样。对吧,你想想我这个数据库表里边,它在咱们这里边只有一个生日嘛,对吧,然后呢,只有一个性别对吧,根本你没有什么年龄,年龄段的一个概念,对吧?而且这性别呢,它只是我们的F和M,对,并不是男女,对吧,但是我们现在在这里,你看对你也就是说我现在啊,在咱们那h base里边,它保存用户信息,而且保存的是什么,是不是应该是你用户本身也处理过的一些信息啊对吧,你从哪呢?你从我们现在卡卡里边把这个用户这个这个数据啊拿过来了啊把这用户拿过来了,那么拿了之后呢,那我可以对做一些处理啊,我可以对他做一些处理,比如说我现在根据用户的生日,我完全可以知道当前用户属于哪个年龄段的,我根据用户性别的F或者M,我完全可以判断他是男和是女,对吧,那你说我现在判断之后,我再往HB保存的时候,我是不是可以把年龄段的信息,把这性别信息直接保存到我这表里边来呀,对吧?所以说呢,咱们现在在我这里边,它其实呢,这个表的结构啊,那么在设计的时候就根据。
05:52
你的实际需求的来进行一个设计了。好了,这是关于我们现在呢,把这个用户表创建,那么创建成功没有呢?那咱们现在去执行一下能力啊,来创建一下啊,那么创完之后呢,咱们现在在这里select,先来from是吧,然后进下来去查询一下我们当前用户表是吧?那么目前用户表里面没有数据,但是可以查询,说明咱们现在这个表啊创建成功了啊,说明咱这表创建成功了,好,那咱现在把这个表创建成功之后呢,咱们接下来再往下走啊吧,再往下走,那么再往下走呢,咱们啊得有对应的一个样例类对吧,你现在这里边有表,那么咱们在保存的时候,对吧?大家想一想,我们在保存的时候,我会叫save to UN尼克斯对吧,但是人家要求你对吧,你的RDD比数据它的一个对吧,这个字段的个数是不是得和我们现在H表里的数据说一致啊,对吧,所以说呢,我现在封装两个样例类,那么这两个样例类呢,它对应的是谁?它对应的是我们这个h base里边的表它的一个字段。
06:56
注意啊,对应的一的表示算段对吧?然后现在呢,把样类串一下,这个样例类的创建呢,这块我也不再大写了,直接呢我考虑过来对吧?来在这里打开我们现在这个程序对吧?找到我们的B,然后进来在咱们这个B下边对吧?那首先呢,有一个pro in啊这咱们这个省份信息啊,省份信息,然后接下来把咱们当前的这个省份对吧,这个样例类给拿过来啊,这是第一个咱们这个purposevice。
07:31
一报,然后再往下呢,有一用户的阳类,把这用户阳历呢,这个也拿过来。这个呢,是我们的优衣。好了,那么咱们现在呢,把这个拿来之后啊,大家可以看到对吧?那么这里还有什么ID,然后姓名是吧,就生日把这些对吧,这两个东西和我们现在H表是不是对应起来呀,对吧?建议对应起来啊哎,那么接下来把这些呢,这个创建好之后,这其实准备工作做好了啊,准备工作做好了对吧?那我现在A着被子里有表了,然后呢,我现在样例也准备好了,那接下来我要干什么呢?我要去读取我们现在这个省份的吧它的一个数据,对吧?那么读取省份数据的话,大家想一想,这个东西应该怎么来读呢?是不是应该是这样的对吧?这个数据呢,那可能会单独去发生变化,如果单独发生变化的话,大家想一想,假如说我单独去修改了某一个省份的信息,对吧,那么这个时候我这个八本身会不会监监控到你现在业务数据的变化呀,是不是肯定也会呀,对吧?就如果说你现在修改一条数据啊,他肯定也会监控到的变化的,对吧?那么如果监控到变化的话,那这个时候他是不是也要走这套流程到这里来,然后他来处理,然后进来。
08:50
它分流,然后给到我们的ODS,咱们这个啊,Province对吧,到这里来对吧,然后接下来那咱们这里是不是得写一个我们单独去处理省份的这样的一个这个Spark程序啊,对吧?那么你现在把这数据拿到之后,这是一种情况,读单独的变化,那么除了单独变化之外,这里还有对吧?我现在这个省份呢,它已经在我这数据库里面存在了,对吧?而且这个省份呢,可能多少年都不会变化一次,对吧?那我现在H里面有啊,那怎么办呢?我是不是需要把这里个数据给做一个初始化呀,通过什么?通过的bootrap,那么通过BOO,他走的流程也是谁呢?也是咱们这条线对吧?他只是把数据读过来,然后现在交给我们现在mawell来进行处理,然后ma呢,也要是把这个东西进行一个的,这个就发送到主题,然后也要进行分流,也要发送到咱们现在对应的我这个表的对应的主题上去,对吧,那么最终也需要他来处理对吧,所以说那我现在呢,我要做的是谁?我要做的是不是咱们先写一个这样的程序,对吧?从我现在主题里边来大数据。
09:50
啊,从他主题拿数据,拿完数据之后呢,那你对他数据做一些处理,最后保存到我们这个h base上面去,这个是我当前呢要做的事儿啊,那么咱们现在如果想做这个工作的话,那么大概的一个流程,其实咱们都做过啊,其实咱们都做过对吧?那么咱现在呢,把这个东西给写一下,就目前我现在要做的工作,大家注意能知道我要做什么吗?就我现在啊,我要写这个程序对吧,他所完成工作对吧?这个整个这个流程,这这这个走法,这个东西能跟上吧,对吧?然后接下来那么咱们现在呢,就来看一看这里具体的代码呢,那么应该怎么来写啊,这个代码那么应该怎么来写,其实大部分啊,大部分咱们代码呢,都是我们这个重复的啊,其实咱大部分代码呢,都是重复的,对吧,什么时候觉得大家觉得说老师这个重复代码呀,不觉得没必要写了,对吧,咱们呢,其实就可以把它复制粘贴过来了。
10:46
你觉得这代码需要写吗?对吧,那咱们现在就去写一写是吧,其实大部分都是重复的,来大家一起来跟着对吧,咱现在呢,把这个东西来给写一下是吧,给写一下。
11:04
呃,那么咱们到目前为止呢,看一看,我们现在分了这么几几个五维包了,那这个专门放工具类的是吧,这个呢是我日活的,然后这个呢,是放一些基本的实体样力类的,然后这个呢是我们ODS层,那其实主要是两个,一个是我们这个can,一个是我们这个ma,就数据做分流,然后还一个呢是DWD层,那么这两个呢,我把它也单独分出来啊,我把你单独分出来,呃,在这呢,我去创建一个。我们这个package吧,那这个呢,我叫对啊,就专门来处理我们维度数据的啊,专门处理维度数据的,那么当前呢,咱处理的是谁呢?是我们这个省份啊,是省份啊,省份信息啊,那接下来咱们现在呢,是从我们这个卡夫卡中。来读取啊,我们这个省份它的一个数据来保存到哪呢?保存到我们这个h base,我直接先咱们操作菲利克斯吧,直接是宝做菲利克斯啊,这也行啊,这也行好,那我现在呢,需要写一个主方法啊,先写一个主方法对吧?那么具体在主方法里面写什么?那么前面这个东西有些东西我要复制了啊,这个东西我相信大家肯定没问题对吧?来CTRLC对吧,CTRLV对吧,把这个东西呢给拿过来,那么需要去改一些东西,同学们,咱们当前的这个表名是什么,我要确定一下咱们这个表名是不是叫什么base province呀,对吧?那你说我在处理主题的时候,这会应该是base然province对吧?哎,那么咱现在呢,把这个主题给拿过来,然后既然呢,咱们现在这个到这里再改一改,对我这个组对吧,那这个就是我们这个promise音啊lo对吧,那我现在想去从卡卡读出去,首先。
12:49
第一件事是吧,干什么呢?是不是得获取偏移量啊,啊所以说呢,咱们现在在这里,我们也是把它分步骤是吧,那么当前呢,咱们做的是第一步段,从我们这卡卡中呢来读数据啊,从我们这个卡夫卡。
13:08
中来读取我们的数据,那么如果读取数据的话,那么首先是不是得先获取偏移量啊,啊在这里来获取我们这个偏移量啊,这个信息啊,获取偏量信息这个东西,假如说啊同学们,那你们自己写,现在你们还需要去看笔记或者看我的代码吗?就我现在写这块这个代码的时候,还需要看的,应该不需要了,是不是来啊,那么如果想获取的话,这里应该有一个outside manager YouTube,然后接下来,那么这里呢,有一个我们现在呢叫get outside这个方法对不对?来同学们,那咱们现在是不是可以把这个topic给传一下,把什么group ID的数据传过去,对吧?那么这个它的作用是干什么的,是不是从我们的res里边,然后呢,根据你的主题名,还有咱们格们来把谁呀,来获取我们当前的这个偏移量,对当前我们现在主题对它对对应的我们消费者组他这个分据便宜量啊,咱们给他拿过来啊,得到的这个offet,对,然后呢,卖啊得到S这段代码呀,我相信同学们百分之短应该100%差不多没问题了啊。接下来我问你们。
14:22
这里边儿怎么写的?盖章赛里面怎么写的,这是你们写的工具类啊,同学们现在如果说让你们去写一遍的话,怎么样?H盖是吧,大概咱们肯定得先这样,是不是得把这个东西封装成一个key啊,然后调它里面什么it get off,但是它返回的是一个map集合,是Java的,和咱们现在想要的这个map集合是不不太一样,然后咱们是不是就个map集合做一个遍利,然后把它封装成这样的一个集合,对吧?哎,没事的时候注意啊,这个东西呢,这写到这的话,大家对这会的代码可能这个没没问题了,对吧,但是呢,对吧,有的时候我的工具力这种代码忘了怎么写的了是吧,忘了怎么写的了是吧,也就是把这个这里边是吧,把这个外部集合的做一个处理,然后封装了一个这样的一个集合是吧,好的,那咱现在啊把这个东西啊拿到之后,然后接下来1.2,那么这要干什么呢?是不是要根据我的偏移量来获取我的数据啊,啊根据偏移量来获取我们这个数据,对吧?那你要根据偏量来获取数据的话,那这块呢,那你来判断一下,判断什么呢?如果说我们现在这个offset,下一个这块代码不写了行吗?同学们。
15:43
啊,其实这个也可以不写是不是,那么如果说啊,我现在把这思路再捋一遍啊,那么如果说呢,我现在outside,对,不等于空,那么并且那么咱们现在off side map对吧,那点我们S如果要是大于零的情况下,对吧,那说明什么呢?说明咱们现在呢,这里边是对吧这个。
16:05
啊,这个已经获取到偏移量了,那么如果获取到偏移量之后呢,那么这里啊,是吧,咱们获取这个读取数据的方式不一样是吧?那么咱们不管是哪种方式读取,咱们肯定呢都调过服装工具类,这个呢叫麦卡卡U,然后接来它里边有一个方法叫get卡卡stream对吧?那么如果说啊,要是有偏移量,那么咱们需要传这么几个参数过去,一个呢是我topic,那么另外一个呢,S,那再往下呢,这里边是我们这个outside map对吧,Outside map,然后再往下这里有个什么呢?这里有一个我们这个格D啊格ID,然后点VR对吧,那么得到的是一个record。Stream啊,那么咱们是不是要把它提出来来把它提取出来啊,把它呢提出来,然后这块呢,咱们V2是然后给它赋一个值啊,这个呢应该是我的那是吧,然后呢,咱们现在把这个给拿过来啊,把这个拿过来是吧?拿了之后呢,这块咱们现在对也得给他拷贝过来,那如果说我现在要是没有读取到偏移量的话,咱们在获取的时候,是不是偏移量就不给你传了呀,对吧?然后这是第二步操作,然后第三步操作,这是干什么呢?注意啊,我现在再写一遍对吧?下一个呢,我就找人上写。
17:23
你们是不是第二轮马上这个分享就开始了,是不是大家说这个分享很紧张,是不是没关系,让你们来点更刺激的,对吧,不光分享上面写个代码试一试感觉怎么样,同学们啊,那么咱现在呢,来1.3啊1.3啊1.3。那么如果1.3的话呢,那么咱们该干什么呢?是不是获取我们当前这一个批次,然后呢,它消费的我们这个便移量情况呀,对吧?那么获取什么呢?当前我们这个批次啊,当前我们这个批次,它或者获取的我们这个偏移量啊这个情况,那它怎么来获取呢?那应该通过我们现在record stream啊这里边啊,它有一个我们这个transform form的个方法,然后呢,本身拿的是不是RDD啊,然后咱们这个要转换的是不是也是我们这RDD啊对吧?那现在我们在我们这个转返回RDD之前,那么咱们是不是得去获取到这的偏量信息啊,怎么获取呢?那首先要把RDD呢做一个强转啊,做一个强转,然后接下来这里放什么?放的是我们这个has outside rain这个方法,然后接呃,这这个令对吧,然后接下来,那么咱们现在这里是不是调不了outside。
18:44
这方法呀,对吧,那么点VR返回值是什么。咱们是什么类型的数据。返回的应该是一个outside read这个数组吧,对吧?哎,返回应该是一个这个数组对吧?那么咱们现在呢,要最后要提交它呀,要提交它,所以说呢,那你要把这个东西呢,给我提取出来对吧?创建一个我这空的数组对吧,Every点我们的empty,然后接下来把谁呢?把我们这个outside这个range给它传过去,然后接下来咱们要给它赋值,所以说把它给这VAR,然后咱们放这对吧,诶给它赋一下值是吧?那这样的话,咱现在呢,这个第一步啊,基本上从我这获取偏量,这个完事了,那么获取完偏量之后呢,这个东西咱们接下来卡卡数据是不是现在也有了呀,对吧?那我当年卡卡数据那放在哪呢?你是得抽取个流给放一下呀,那在这里我们呢,来比如说叫outside,然后呢,Stream outside d tri,然后接下来,那么咱们现在对我的outside d tri来进行处理。
我来说两句