00:00
好,刚才呢,我们把这个日志类型啊,这些都介绍完之后,下边呢我们就开始啊,真正的要生成对应的数据。啊,那生成这些对应数据啊,先带大家去看一下这张图,日后呢,每一个主题前面都要带大家去看一下这个图,这个图就相当于你的一个图纸。啊,你的地图你走到哪了?一定要时刻记得你走到哪儿了,然后要做什么事啊,我们来看吧。你看这张图,我这个地方虚线框标红的这一块。啊,这就是我们马上要实现的地方啊,我们要生成什么呢?对应的日志文件数据啊数据,那这里面其实哈,啊,以前咱们在写对项目的时候是怎么模拟的呢?是通过A。啊,负载均衡到对应的日志,服务器的使命put,然后通过什么put,再把数据写到log file里面,那前端这块写个Java代码,模拟APP程序。
01:02
这咱们是实现过的哈,是这么做的啊,但是效果不太好啊,不太好在哪呢?就是Java的代码太多了。啊,而且你们那么听说Java是很厉害啊,但是用起来的时候有时候不太行啊,而且有有容易,呃,容易这个偏离我们的这个主线,因为我们的主线呢,真正的是后台的大数据分析啊,并不是加入这个开发啊,你只要知道前边这个数据大概是怎么来的就OK了,具体怎么实现不需要你来说。为什么说不需要你呢?之前在深圳那边有一个公司招一个程序员,要求会安卓前端、Java、大数据。最终的薪水多少呢?给12K很崩溃啊,很崩溃啊,据说应该是选战的是吧,应该很厉害啊,那不是,尤其这种小公司要求你什么都能干啊,最后给你开钱的时候很说啊,所以我们还是要精通一样啊,我们就是一个大数据工程师啊,并不是一个Java程序员啊,要记住了,好,那这里面我就直接啊,通过这个Java代码啊,写Java代码生成数据写入到磁盘上啊这么一个过程啊啊。
02:19
那下面呢,我们就开始搭建这个工程啊,搭建工程,那搭建这个工程。我先写吧。创建创建之前好,那下面呢,我们就来创建这个工程啊,那创建这个工程之前,大家想一想,我要造一些数据,比如说我要照1000条日志。1000条什么样的人是长这样?去找这样的日志,那这个日志你怎么去找。
03:04
1000条这样,同时这里面还对应着启动日志,启动日志呢,这个要求非常简单的,大括号开头,大括号结尾,1000条。找谁呀?其实准确来说它是不是精神的,就是封装精神对象,哎,那这些字段我可以把它封装成B对象对吧?啊B对象,那么怎么把B对象转换成接呢。用框架,什么框架,我们学过阿里巴巴的fast,这是还有谷歌的高son啊,还有杰son啊,杰son啊,目前主流的这么三大框架,一个是阿里的发杰son,一个是谷歌的高,还有一个森啊,这面三个框架啊,当前比较主流啊,那这是这一块啊,我们就要造这些数据啊,我先把这个工程搭建起来啊,这一块呢,属于这个,呃,你不需要去太深入的去了解这块啊,因为在真正的开发中,我们的数据是。
04:13
一定是有的对吧,啊,一定是有的哈。因为你你没有这个数据的话。那你也不谈不上什么大数据开发呀,对吧?啊,只有你有海量的数据的时候,我们才会去做这个大数据哈,好,那我们创建这个工程。Next这块,Com点五。好,Look like finish结束。那这样的这个工程啊,我目前呢,就创建好了,创建好了之后下边呢,我们就在这里面,哎,添加一下这个po文件,那这个po文件里面我们要加什么内容呢。
05:03
第一个要加的依赖就是fast接啊fast它就用来生成对应的建设数据,那还有一个是日志生成的框架。那大家想一个问题,我在这个Java程序里面。把B对象翻译成了阶整。那最终我是不是要持久化到。文件系统或者磁盘上,那怎么把这个内存中的数据写到磁盘上,让你现在实现,能不能实现。以你现在的基础,能不能搞定?最差的苍老师不给你们讲过LL流吗?对吧,L流是不是就可以实现了?哎,写到这个文件里面没有任何问题啊,那其实那这个我们不需要自己写,要流我们用一个第三方的框架啊,叫log back,它专门用来生成日志。
06:06
而且它有一个好处啊,一会儿呢,在下面介绍啊介绍一下。好,那这是对应的它的版本,那下面这一块它还有编译打包插件,这又是干啥的。这钱用不用啊。看那表情说没用过是吧,100%用过哈,你们在学MR也是word杠程序,第一个程序把打包上传到集群,打包的插件就是这个啊,我可以说除了这个标红的这行代码改了之外,其他都没改。因为他是全类名。啊,现在没有。啊,去找word第三个文档啊,Word count那里面插件就是这个,那它其实辅助我们去,嗯,打包的啊打包的行,那下面我们把这个拿回来。没学过是吧,那个打包有的时候打不全,必须用标准的这个这种打包。
07:08
这个是100%能搞定的,你那个有的时候有的时候不行。好,这是标准的这个打包插件,而且呢,它这里面会打这种带依赖的价包和不带依赖价包,两种价包都给你打出来啊行,那这个呢,是把这个添加进去之后。那下边再往下走,注意这个地方啊,这个全列名,为什么我你看我是复制粘贴了,因为它跟我们未来要写的这个代码这块,这创建这个包名啊得一样。是。右键点下报名啊。我也不知道。He。狗,然后后面这块你可以来一个这个名字叫APP ma啊,当然你可以自己根据你的呃习惯去改哈,但是改的话记住那个打包插件里面改这个群里面啊就行了啊,就是它你可以右键copy copy之后,然后进到这里面把它替换掉啊就没事了啊啊那这个呢是APP啊放在这,剩下的事继续往下找啊,继续往下找。
08:23
那下面呢,来到这个。公务之大啊,还有以至于下面这些内容。这些内容是干嘛的呢?都是用来。封装命令项啊,也就是说把上面的12张表对应的12张表啊,一个一个的敲出来,你看吧,随便找一个是不知道。是不是两个字段,然后生成它的对应的get和set方法,方便我们日后的一个对它赋值啊,就没了,你可以随便看来看一个。对应的字段啊,然后再来一个啊,前面就是这个字段,下面全是盖的算的方法啊,没有任何技术含量啊,再来啊,这是广告的啊广告的啊,那这个我就从这里面再给大家的资料里面的。
09:14
代码,代码里面有个B,这里面全是B对象啊,全是被对象,那我们复制过来。然后来到这儿,这里面我们再创建一块儿。这个package叫com点。硅谷点b.oK那把这些都给我粘进去。一共这是多少?13个变理箱啊,加上一个公共的应该是13个,一共有个APP base对吧?这BASE13可以稍微浏览一下啊,这里面是对应着12张表的B对象字段。
10:05
到目前为止,我们还没有对这个代码写任何的业务逻辑。啊,接下来我们要写的业务逻辑呢,是在这里面,是在这个APP里面去写业务逻辑,那现在就是我们要在这个APP内里面写什么。啊,把这打开。左侧,这就是我们要照的数据,未来就长这样。那现在右侧我们要写代码怎么写?需求来了,这就是需求,嗯。像这种呢,我们是,呃,现在因为我没有数据,所以说要造啊,在企业开发中呢,有一些情况,我们也是要造一些数据的,什么情况呢。这种公司他对进度要求很高,他左侧这边是加va在干活,右边要求你大数据成员也在干活,一起干活啊,赶工期嘛,比如说Java做完,大数据做完,那这个时候你们两个之间只是把接口定义完。
11:12
剩下事各干各的,那你这边没有数据怎么办呢?你就要自己去照这个数据,这是一种场景,还有一种场景,什么场景需要你去照这个数据呢?问大家一个问题,你后面大数据分析,各种指标分析完了,你如何能保证你这个指标是对的?你统计了,比如说今天的UV是100万。那谁能证明这100万他就没错呢?你要验证测试,那怎么测试你能有测说服力呢?能证明你这个系统没问题。你是我前端,我这边我可以照10万个或者100万的数据,然后而且是根据你的规则制定好的发送过来,正常情况下就应该是100万的热火,那它结果是90万,那就说明你这个系统不对啊,同时还有一些特殊情况。
12:12
比如说你日后要做数据清洗。啊,前端这边有100万的数据。清洗完应该是90万。啊,那是说我在造数据的时候,我故意造10万的脏数据。啊,这是生产环境下,不容易去去做,不是控制的。因为我们现在可以控制多少条这数据,对吧,而且它错成什么样,我们都可以去照。啊,那这就是要对这个系统做测试啊,所以说这个项目就起到这个作用,那么来看吧,这个阶段怎么来做。好,那首先呢,这个代码里面设置了两个参数啊,两个参数一个呢是控制每条发送的这个延迟时间。啊,延迟时间,比如说这边往这个日志文件里面,这是文件啊,这是Java程序往里面去写。
13:08
两种方式,一种方式。条与条之间没有任何延时,一下子1万条数据可能过来了就写完了,那加上这个延时起到什么作用呢?日后我们有一个框架叫德鲁伊,我们要实时的分析进来一条数据,我们这边出一条报表,进来一条数据报表。那这种场景的模拟就需要这个日志的生成,是不断的一条一条往里传的啊,所以说这种场景我们加了一个延时控制,那同时第二个参数更关键了。循环便利次数,你说我要生成多少条数数据默认的这里面是1000条,当然了,根据我们的这个测试需求,我可以模拟1万条,10万条,100万条。是这样的,就是说更灵活一些,日后咱们在开发的时候也是要这种方式啊,叫项目可配置。
14:02
啊,很关键啊,可配。那好,那具体的在这里面我们就要做我们的事情了,这里面报循环1000次啊,然后来了一个Switch k k0和K1,那K0和K1分别代表着K0里面专门来处理启动日志,因为启动日志就是这些字段,没有什么其他内容。啊,那像下面这个是事件阶段,那它既要处理上面这些内容,同时要处理这里面是事件的数组多个事件。进行封装啊,那好,那先说上面这个啊,上面这个上面这个它就对应的这一个一个的实践很简单,怎么说呢。那你就创建一个启动日志的B对象啊,然后将B对象转换成Jason,用什么呢?Fast Jason啊,直接传递个频对象,就能出来一个接对象。
15:01
然后在控台上就可以打印了啊,这是验证啊,同时呢,我们其实还可以直接打印到这个文件上啊,文件上OK,那就是启动日志,很简单,就是创建配对象,将配配对象转换成节省啊运作工具发节省,那下一个这个比较复杂的对应的这个。啊,那这个那这个呢,也是看这里面,首先它这地方是一个服务器时间拼上一个,它你先不管前面这个,你先管后面,后面它是一个完整的接分对象,接分对象里面对应的三个P值啊。第一层对应了三个P值,分别是apcm和ET。啊,这么三个值。那简单了,我先创建一个接身对象,然后向这个接身的APP,就是APP里面去赋值。那简单吧,Put key whether put key对应的whether,那同学说这个whether不好写,它是一个什么,就是一个接身对象,对吧,就是一个公共子段的一个接对象啊好,那向下再往下,那这一块是比较难的,对,那它的K是ET,它的Y流是杰森数组,那的Y流是接身数组,我们就用一个杰森瑞瑞,然后像这个rra里面去负对应的值,哎,那接身RA里面每一个值都是一个接身对象。
16:38
好,那到了这一级之后,那剩下的一个事件就是对应的一个接生对象。那至于这个对象怎么封装,我可以,这是B对象。B对象用fast接身就能把它转化成截乘数据,那上面这是不是也是对应的这个K值啊,那还是跟第一层的道理是不是一样啊,哎,往里面去put这个K值就得到了A啊,OK啊好,那这个实验同装们,那再往下呢,就是获取当前系统的时间,那这个用来处理啊服务器的时间啊,那再往下通过那个bug对象将系统时间。
17:21
竖线节省拼装在一起啊,因为它本身就是使劲啊,支付方一拼接就OK了,然后打印到控制台和系统。最终就结束了啊,就是这么一个过程啊,那稍微回顾一下,首先进来我们需要配置三个两个参数啊,讲究的是代码的可配置性啊,以后呢,写代码这么写,那下面这块呢,是具体的循环内容,循环内容呢分两类啊,一类呢是处理这个启动日志,另一类呢是处理这个事件啊事件类型,那启动日志这一块就是创建并对项,然后用发接身把它转换成接身。
18:02
那下面这一块呢,也是先创建一个竞争对象,然后向这个竞争对象里面对应的P值。去赋值啊,你是接单对象,我就要负接任对象,你是这个string,我赋string,你是接身瑞,我就要赋值接身瑞啊接这么简单,好,那这是这块啊,完成了,那我们把这代码拿过来看看是不是按照我说的去做的啊,这块代码很长啊,大家不用去敲啊,不用去敲,日后呢,你需要的时候,你可以按照我这个代码去改就行了。他没有任何的这个逻辑,就是一个一个的晒晒。对。一些特殊值,就是数很长很长,看的很多是吧。很有技术含量,就是带菜,没有任何其他东西。发出来了。
19:04
戒指没拿回来吧?啊,再回来。OK吗?啊,这就OK了吧,哎,倒过来,这就是倒过来之后,我们从第一行代码来往下看,看看是不是按照我说的啊那么去做的,那首先上面呢这些呢是生成的一些随序数啊都咱们往下看,往来走走到这,这是没方法进来之后第一件事啊解析参数对吧?啊参数如果这个参数二嘛,啊参数参数大于零。那就说明传进来参数了,那我就用你传进来值,没有的话默认就是零啊好,那第二个就是如果你的参数大于两个啊,说其实就是两个呗,两个的时候,那这块我就取你这个值,否则的话,我默认的就是1000条1000条日志,OK,那这个参数处理完,接下来就是具体的去生成这个数据,那也就是对应的这个方法。
20:07
那这些方法一进来就是一个负循环,那循环变列的示数默认就是1000啊1000好,再进来之后,首先是一个Switch啊,分支K0K1啊,那这个flag呢,对应的是random是不是随机啊,啊这个示数不一定好,那进到这里面,你看它出了什么事,又了一个。这是generate啊,大看看它这里面是啥吧。嗯,进来之后第一件事又了一个start。对象,你看他对象是啥。是不是这个东西啊,嗯,是不是个对应的star的那个文档里面的字段啊,然后他继承了一个IP备,IP备是谁。公共制造对吧,制造啊对这回那AB star,那下面你看开始各种封装s a start set,设备ID set,用户ID set程序版本号,那这些值你看。
21:12
全部都是是机产生的啊,然后再来设置这个语言啊,Language啊,是英国的E什么PT啊,然后再往下渠道号啊,渠道号,然后从哪个渠道来的BR这个啊,还有手机品牌啊,三星的啊,华为的AC的,再来嵌入的版本号g ma啊,屏幕宽高这些东西全部都是random来的啊random啊,手机WiFi 3g4g WiFi啊,还有这个经纬度啊,你看这里的值全是10G的,程序入口,开屏广告啊,加载时长啊这些,那最终到这之后。他是不是就把这个对象给re回来了啊回来了,那re回来之后,那我们再看。
22:03
好,还是来到这,来到这之后,也就是说他给你返回一个star对象啊,Star对象,那这个star对象就可以用这个fast的接身传进去,一个对象出来就是一个世界。然后它是一个那back。这老哥在这儿。工厂类啊,创建这么一个静态对象啊,直接将数据打印出来啊,有什么复杂逻辑嘛,啊,根本就没有什么复杂逻辑啊,那这个处理完之后,下边我们来看下一个啊,下一个呢,是就是对应这一个复杂的内容。也是说我们要照这个数据。那照这个数据,我们先拆解的是先处理Y乘这三个APCM和ET能来看吗?首先用了一个阶层对象之后put被P进来,然后表示APP端数据啊,然后呢,Put CF common这段对吧?Common这段你看啊,是不是APP base,哎,公共制造,那base里面设备用户啊,程序版本号名称啊,往下找,往找找,全是S这种值,在SS1直到最后这块。
23:22
在呢?然后他是接省点脱。这将这个B对象返回一个这个接吧,啊这对象好,那你再看。在这,那这时是不是给他了,那也就是说这一块从这到这就是一个揭示对象,公共制段赋值给了一个P为CM的解释。啊,就没过程又复制完了,那下边就到了这个ET了,那ET来吧,ET我说它是一个杰身瑞对吧,那你是一个JA身瑞,我就拗一个建设瑞,好,那建设有瑞,我就往你每一个建设有A里面去赋值。
24:06
接受每一个值对应的是一个接身对象,好,那那这下面我们对应的11个事件的接身对象。那至于取哪一个,它是不是random啊,它是random获取的,那好我拿一个为例,那就拿这个吧,进到这里面,这是S一个,它这是D类,进看啊进进来之后它是什么时间类型,我就用一个对应的事间类型的对象啊,有了对应对象之后,疯狂的一顿塞一顿塞。全扇,那在到这的时候,它就给你又转换成G扇了,对吧?啊,那它现在转换成介扇,它处理的是哪一块呢?其实是这一块。因为这是对应的B对项嘛,啊看好了,这是对应的B对项数据,我上面这一块还没处理呢,那你看怎么处理,那说拿到这些对象之后,看有这么一个公共的方法进来,这是表明啊好进来进来之后因为它名称啊,因为它的对象。
25:17
是不是对象,这个对象给的是KV啊啊,存到KV这个K里面,那上面这个ET存的是时间对吧?啊时间en存的是事件的名称。啊,就这么重装,所以说这个封装过程当中就是put key啊put value这么一个过程啊,不难哈,好,那我们再回来。那这这这个地方啊,这个有了这个瑞之后,它入了这么多事件,那再往下走,脚下走,那这一块获取的是一个服务器的时间,然后进阶。看。是不是就用这个服务器时间竖线拼接上这个接身对应的数据?
26:02
啊,就是为过程啊好,那再往下这块呢,是控制这个延迟的一个时间处理啊,我们传进来这个参数,不传参数默认是零啊,就是零延迟,如果传下参数,那你这块延迟多少,比如说出出一传来1000就延迟一秒钟,延迟一秒钟那就没了,这是主方法,那剩下的下边这一阶段就是我们刚才看到的那些,只不过呢,这个四件类型比较多儿已啊,核心的字段全在这个那方法里面啊,就这么多。啊,所以说它不难哈,不难之后,那我们运行一下。理解。哎,这样呢,我们就把这个数据呢打印出来了,那打印出来你会发现这里面是有两类日志的,一类日志呢,前边是在服务器时间数线,竞争对象在直接就是竞争对象是不是两类啊啊是两类啊,那这里面这一类它对应的是启动日志上面对应的是事件日志啊,那为什么启动日志里面没有加上那个数据时间的原因是这样,日后我们占用这个德鲁伊进行分析这个数据的时候,它是不能对这个数据额外进行处理的。
27:19
啊,它处理不了,那他就认为它不是一个监视数据,它解析不了啊,那就错掉了啊,就不能符合我们的信用需求,那这个呢,像下面这个,我们是木来未来是要进入到have里面的。那还有里面可以对这个数据啊,进行任意的切割,对吧?啊,任意的切割处理啊,可以把它再呃解析出来啊,所以这个每个的场景不一样啊,所以说智能的格式也不一样,可以往后看。嗯,这短的啊,这长的。啊,对,你的世界。这多好,那这个就是把这个日照出来了,但是这个日志照出来呀,还没完啊没完,你只是在内存当中啊配置一下,那它如何把它写入到对应的磁盘里面。
28:05
其盘文件就需要用到一个log back这个框架啊框架。
我来说两句