00:00
好,各位同学,那刚才呢,我们已经把阿斯卡班部署完毕,并且已经学会了阿斯卡班的使用了,对吧?那接下来我们就可以使用阿斯卡班去调度我们自己的全流程了,OK,那既然要调度我们自己的全流程了,那我们首先得干啥?是不是得先知道咱自己的全流程是什么样的呀,对吧?OK,那咱们现在呢,先怎么做啊,我们先去画一个图啊,用这个图把咱们的这个全流程给它描述出来啊好,那现在我们一起来,诶总结一下,画一下来找一个画图的工具啊,咱们找这找这个吧,嗯。啊,那现在呢,我新建一个图啊,就这空白吧,啊啊,那现在咱们开始啊,那我们要捋这个工作流程图的话呢,是不是得从头到尾去捋啊,对吧,那咱们得从哪开始。是不是得从采集开始,对不对,那采集我们是不是有,呃两类数据源,一类是用户行为日志,一类是业务数据,对不对?咱们用户行为日志是怎么采集的,是不是用实时采集,然后写的卡不卡,再通过写到HTS对不对?刚才说这个需不需要进行每日的调度,也就是他需不需要包含在咱们的工作流程当中,需不需要。
01:10
不需要啊,为什么不需要,你要知道啊,这个flu实时采集的这个通道我们需要怎么办?是不是需要一直运行啊,对吧,我们只需要启动之后,是不是让它一直运行就行了,你需要每天重复去启动啊,是不需要的啊,所以它诶就不应该属于我们这个需要每日调度的工作流程当中,它不需要啊,它不需要啊好,那接下来下一个,那下一个是不是应该是我们那个业务数据的采集啊,对吧?业务数据采集咱们采用的是什么方案,SCO对吧?Scoop是不是批量导数据对不对,那每次执行scoop导数据的任务,实际上就是提交了一个什么micro对吧?啊,当然它只有Mac,没有reduce是这样的,那所以说scoop这个同步数据的任务需不需要包含在我们的啊,这个调度流程当中需要啊,这个大家要理解啊,啊,那现在呢,我们就开始画一下啊,那首先我拿一个这个方块啊,里边我们把我们的任务给它写上,实际上我们要调度的具体任务就是我们写那些脚本对不对啊,我们先写第一个啊,第一个是啥?这个就是S库同步数据的那个脚本应该是啥?应该是呃,MY。
02:10
错,然后to to,哪to hdfs对吧?那OK,那这就是我们要调度的第一个任务啊,OK,我们紧接着继续往下进行啊,那假如说数据现在已经来到了HDS,那接下来该哪了?是不是该从HDFS往ods层导了,对吧?那往ods层导数据的时候,咱是不是有俩任务,一个是导日志的,一个是导业务数据的,对不对?那所以在这呢,我们需要去给它区分一下CTRLCCTRLV。来CTRLCCTRLV来往下拉啊,那这个我们先写其中一个啊,比如说是hdfs to,哎,Ods应该是谁,比如先DB吧,啊DBDB是不是就是业务数据对不对,与之对应的是不是还会有一个呃,Log呀,对吧,咱们给它改一下啊,这个改成log。Log啊,没问题对吧?好,那现在我们已经有三个任务了,那这三个任务他们的依赖关系应该是什么样的。
03:02
谁依赖于谁?显然是不是下面这个hdfs to ods DB是依赖于my circle to h CS,没错,是不是必须业务数据到HTS才能把它从HTS导到ods层?没错吧?那这个日志跟前面有关系吗?它俩是没有任何关系的,对不对,那所以现在的依赖关系只有这一个啊,我在这画一个箭头来给它连上啊来这个拿过来好,那现在依赖关系是不是就指明了呀,对吧?那接下来我们继续S啊,数据现在是不是已经到ods了,到了ods之后再往下呢。是不是该往DWD层和dim层倒了,没错吧,那现在我们继续往下倒啊,那往dim层导的时候,我们那个脚本的名字叫什么。这个脚本的名字应该是叫做呃,Ods to dim后边还有一个DB对吧?没错吧,这是往dim层导,那除此之外是不还有一个往DWD层倒的对不对?那现在我们再来一下,应该是ods到DWDDB,那与之对应的还有一个什么,还有一个ods to dwd log对吧?那我们现在也写一下啊,那这个改成log啊,那现在这个任务的依赖关系应该是什么样的,我们补充一下啊。
04:13
来,咱们一起来补充一下,应该应该是什么样的。应该是这样的吧,来我们看一下啊,首先那这两个任务依赖于谁,是不是都依赖于他对不对,那这边这个是不是依赖于他,是这样的吧?OK,那现在呢,我们把这个关系给它补充上啊来,CTRLCCTRLV拿过来,那把这个给它连一下,那这边连在这儿啊,CTRLCCTRLV,那这个呢,还是连在这儿啊把它拿过来,那这个依赖关系是不是就OK了啊,接下来我们再写下一个啊,CV啊,拿完之后呢,给它连在这儿,呃,这个箭头呢,指向这个位置啊,那这个依赖关系是不是咱们就呃描述完了呀,对吧?接下来继续往下走,那再往下该往哪一层倒。该往DWS等导的,对吧,DWS啊,那下来我们继续往下走,CTRLCCTRLV往下走,那这个比如说就是DWSDWS应该是哪个脚本,DW d to d ws没错吧,那他们的依赖关系是不是应该是依赖于上面这三层啊对吧?来咱们给它写上来,CTRLCCTRLV,那现在我们往下拉一下,这是是不是A,这是一个对吧,那接来往下走,那这个是不是又是一个,对不对,那继续往下走,那这一个,那继续连那这个啊,CTRLCTRLV,那这边呢,连不来。
05:23
难受。啊,那这样一来的话呢,咱们这个依赖关系呢,就算是哎给它,哎升明完了啊,那接下来继续往下进行了,那再往下该往哪层档了,再往是是不是该往咱们那个DWT层档的对吧?DWT,那现在把这个CTRLCRV我它拿过来,这个依赖关系是不是肯定是这种对不对,那应该是DWS,然后拖DWT啊没错吧,然后再往下,再往下改什该往ADS通道的对吧,那再往下这个依赖关系是是不是就这样的呀,对吧?好,那现在给它改一下,改成DWT,然后呢,拖ADS这个没有问题吧,OK,那这个是不是就是现在我们完成的所有的工作,所有的任务。
06:04
对不对,但是啊,这个工作流程还不是我们最完整的,还不是最完整的,为什么不是最完整的啊。呃,我们数据仓库的后边呢,还会有一个报表应用,报表应用是什么来家还记得吗?是不是就是将我们ADS层的统计结果以图形化的方式进行展示啊,对吧?啊是这样,那也就是这个报本应用它需要干啥,是不是需要用到咱们ADS层的统计结果呀,对吧?啊,但是通常情况下呢,我们这些报表应用啊,不会让他直接去对接have的,因为咱们现在统一结构是不是在have的ADS层的表里啊,对吧,通常不会对接have的,那对接谁呢?一般对,一般情况下对接这个关系型数据库,比如说my circle,那也是我们这是不是还需要一步啊,哪一步是不需要将ADS层的数据导到my circlel数据库里边,对不对,主要就是为了给谁用,给我们的报表系统去使用,对吧?那所以在这儿呢,我们还得再补上一个,补充一个任务啊,那也是从哪到哪,从诶咱们的ADS导到MY啊,那这个起名为啊,就HDS吧,HDS,然后呢,To my OK,那这是我们需要补充的一个任务啊,这个任务咱现在还没做对吧,这是我们一会儿要做的啊好了,那大家现在看到的这个流程图呢,才是咱们这个数据仓库当中的一个完整的流程图,从前到后,大家看一看,可以看一下这个漏里边一共有几个罩啊,一个两个三个四个五个六个。
07:23
还有几个七个八个九个,一共是呃,十个兆吧,对吧?啊,一共十个兆吧,啊好,那现在我们要做的工作是什么呢?哎,就是去做最后这一步就是这个HD FS to my啊,那这个hdf to my是把哪的数据导到哪啊是把have当中的数据是不是导到MYL里边,对不对?那你说这一步我们应该用谁去完成?由谁完成,是不是应该使用scoop去完成,对不对,我们前面说过啊,就是scoop呢,它能实现两个功能,一个功能是什么?是导入,还有一个功能是啥?是导出,导入指的是什么?导入指的是把关系型数据库的数据导到哪儿,导到海吧这个生态体系对不对啊,那导出呢,就是反过来把海多吧生态体系里边的数据呢,导出到我们这个,诶关停数据库里边啊,是这样的啊,一个导入一个导入,也就是它是以海杜这边为中心的,对吧?啊完了之后大家要注意一下了啊,导入和导出还是有一定的区别的啊,库的导入导出有一定区别的,我们先说导入啊,导入的时候呢,这个相对比较灵活,导入的时候相对比较灵活,我可以把关系型数据库的数据直接导到哪呢?导到HDFS的一个文件。
08:35
也可以把关型数据库的数据,关机型数据库的数据导哪呢?也可以导到havell的一张表里边,就是直接导到一张表里啊,或者说呢,也可以直接把诶这个MY或者是其他关系数据库的数据直接导到比如说h base的一张表里,这是咱们导入,导入是比较灵活的,灵在哪儿呢?主要是我这个目的地对吧,目的地选择相对灵活,当然在我们这个项目当中,咱们导到哪去给他。
09:02
是不是导在HT盘上一个文件的形式存在啊,对吧?啊是这样的啊,那导出就不一样了,导出啊我们只支什么,只支持将HDFS下面的一个文件啊,注意只支持导,导什么导H这样一个文件,把这个文件导到哪呢?导到关系数据库里边。这个大家能理解吧,啊,这个是导出的时候要注意的一个事项啊,那既然导出的时候呢,它只支持导文件,那你说我们一会儿自己去导数据的时候,咱们得注意哪些问题。得注意哪些问题?我们要导的是什么,我们导要导的是不是ADS的表的数据啊,对吧,那但是它只支持什么,是不是只是导路径,是不是只是导文件啊对吧?那所以说我应该怎么导出先。我应该怎么打?我是不是只需要把啊,咱们have表,也就是ADS层的表对吧,它在hfs的路径告诉死op,那死库op是不是就能帮我们去导这个文件了呀,就是这么去导的啊,那既然scoop他导数据的时候导的是这个路径下边的文件,那也就是说他每次去导我们这张表的时候,导的都是什么的数据?
10:09
这都是全表的数据,对不对?你导出的时候你可以选择列吗?比如说我只想要这一列,这一列,这一列可以选择吗?选不了,那你能选行吗?比如说我只选这一行,只选这一行能能行吗?不能啊,是不能的啊,也就是说你每次导导的都是全表,都是全表啊,那全表就是包括全部的列,也包括全部的行啊,那既然它有一个这样的特点,那我们在使用scoop去做导出的时候,我们就得注意哪些问题啊。首先第一个问题就是建表。你想一想,我们要想把数据导到,比如说导到MYSQ里边,那你说MYSQL里边是不是得有一张表去接收这个数据,那就说,那你说我们在建表的时候需要注意哪些问题?首先你的字段是不是必须得跟ADS表示字段保持一致,这个保持一致体现在什么方面啊,第一个方面字段的个数,第二个方面字段的顺序,第三个方面还有什么,还有这个字段的类型是必须都跟诶还有当中ADS那边的一致才行啊,对吧?因为你没得选对不对啊,这个必须得搞清楚啊,这是一个,那再有一个呢,还得注意一个什么问题。
11:13
就是数据的重复导入的问题,你想一想啊,咱们ADS层是不是每天会往这个ADS层里边咱们会写入,比如说几条新的数据啊,对吧?啊,但理论上我们其实要想导是不是只需要导每天新增的这个数据就行了,但是由于死库导的是什么,是文件对吧?所以我每天导是不是导的都是全名,既然都是全名,那原来的数据是不是每天都会被重复往外导啊,对吧?那重复往外导我买S写的时候,咱就得注意啥问题,是不是这个数据的重复问题啊,对吧?诶我们得做相应的配置,得保证买server里边的数据呢,它是唯一的,你不能重复啊,这个大家要理解一下,OK,那这个呢,就是我们一会儿去做这个死库导出任务的时候呢,一个注意事项啊,两个注意事项吧,啊,再总结一下,第一个是什么建表,建表咱们得注意对吧?那第二一个导数据的时候得保证什么数据它不能重复啊,这是我们要注意的啊,OK,就是这两点啊,那到底这个表具体怎么建啊,以及这个怎么去保证这个数据的这个唯一性啊,怎么避免它重复啊,这个我们后续再详细的说啊来,我把视频停一下。
我来说两句