00:00
呃,好了,各位同学,那咱们接下来呢,看一下我们文档当中的这个PPT啊,这呢有一个数据仓库的核心架构,那现在呢,我们把这个打开,咱们一起来看一眼啊,呃,这块大家认真听啊,因为是这是咱咱们大家第一次接触到这个数据仓库,对吧?所以说最开始咱们这个基本概念咱们先搞清楚啊,来咱们开始。来,首先各位同学,咱们现在看到的这个绿色的这一小块呢,其实指代的就是咱们那个所谓的数据仓库,然后大家可以看到啊,数据仓库我后边是不是加了一个小括号,里边放了一个have啊,对吧?OK,那意味着什么呢?意味着我们这个数据仓库的一个主体,那就是谁呀,就是have,诶,那have它能不能胜任数据仓库的这个工作呢?能不能收人呀?其实能不能让咱们可以简单的分析一下啊,就是我们刚刚提到一个数据仓库,它至少得有三个功能,对吧,数据的存储,数据的管理,数据的分析和计算,对不对,那咱们来看一看,你说我们这个have,它能不能提供这样的三个功能。
01:02
啊,简单分析为先说存储,但你说have物它有没有存储的功能啊?呃,有,其虽然have它自己可能不会真正的去存储数据对吧?但是呢,它底层的数据是是不是可以放到HDFS上啊,是这个道理吧,那HDFHDFS是不是一个分布式的可扩展的这种海量的数据存储系统,对吧?你想存多少都能存,所以存储肯定是没问题的。好,那接下来往下看下一个什么是管理对吧?诶,管理害物有没有对数据的一个管理的功能呢?其实也可以说是有的,为什么大家都知道我们have,嗯,它其实做了一个非常主要的工作是什么呢?就是他会把HD上边一个一个的文件映射成一个什么呀,映射成类似于关系型数据库里边的一张一张的表,对吧?而且这个表它是一个什么表呢?二维表对吧?啊二维表这个概念一定要搞清楚啊,什么叫二维表,有行是不是有列呀,对吧,这是一个二维表对不对?OK,那那你看这样一来的话,那我这个数据它由文件映射成了二维表了,那这个是不是就。
02:02
会被管理的非常的清晰,非常的有条理啊,对吧,是这样的,OK,因为你这个二维表是结构化的嘛,对吧?哎,所以管理的非常哎有条理,非常的清晰,那咱们用起来就会非常的方便啊,是这样的,那所以说这实际上是我们haveve提供的一个数据的一个管理的功能,肯定是没有问题的,那再一个呢,就是数据的分析和计算的一个功能了,那haveve有没有的,那肯定是有的呀,对不对,那因为haveve已经把数据映射成关系型数据库里边的二维表了,对不对,那我们haveve自然而然就提供了一个功能,什么功能了,是不就是写circle去分析咱们这些表里边的数据啊,对吧?当然这个circle它底层可能是MR,可能是sparkrk,可能是太子的,这个计算任务是不是都有可能啊,对吧,当然分析计算肯定也没问题,那所以说从刚才我们这个分析来看呢,Haveve作为数据仓库没有任何问题,OK啊,那实际上大家也可以去have的官网上看一下have是怎样对自己进行定位的,哎,他对自己的定位其实就是一个什么呢?就是一个大数据的数据仓库工具啊,他就是做数仓的,那所以。
03:02
咱们这选have没有任何问题,好了,那我们现在继续往下进行啊,那也是咱们现在得先明确一下,就是我们的数据仓库,咱们主要是用have去做的,那我们后续咱们整个书藏课程,呃当中呢,那咱们主要用到的其实也就是have,那大家这个have学的怎么样不咋样,这个三课现在玩的溜不溜啊,不溜是吗?那不溜的话,那咱们做书藏项目的时候,你得抓紧把这个S课给他玩溜了,是这样的啊行,那这个练词时候咱们后边再说啊,咱们先继续往下看这个书藏的核心架构,好,那咱们接下来干啥呢?接下来我们来看一看啊,就是我们这个数据仓库,它这个因为数据仓库玩的是数据对吧?OK,那我们来看一看这个数据从前到后的一个完整的链路是什么样的啊,因为咱们数仓,数仓就是玩数据嘛,对吧?来咱们首先看一看我们数据它是从哪儿来的,那大家想想数据仓库的数据是从哪来的?数据仓库的数据从哪来,公司里边来,从公司里边的什么系统里边来呢?咱们应该听到过一句,就是从业务系统里边来,对不对?OK,首先咱们得搞清楚什么是业务系统。
04:09
咱们老说业务系统,做采集项目的时候,是不是也提到了什么业务系统,业务系统啊,对吧,到底什么是业务系统啊。呃,有的同学应该对这个概念比较理解,但有的同学可能就是可能之前没接触过类似的东西,可能不是那么的清晰啊,那接下来我给大家简单解释一下什么叫业务系统,所谓业务系统你可以这么理解,业务系统就是我们企业当中扩容公司里边用来支撑咱们企业的核心业务的一个系统啊,可能这句话说起来还是不好理解,举个具体的例子啊,比如说我们现在公司呢,是一个做电商的公司,大家想一想,你说你做电商的,你的核心的业务应该是什么呢?你是不是得提供一个什么,你得提供一个线上的购物平台吧,电商电商嘛,对不对,那完事之后你还得怎么样呢?哎,是不是能够提供相应的这个用户的下单,用户的支付的这种功能才可以是这个道理吧,你得有这样一个平台,然后呢,用户可以在这个平台上面去下单去购物,哎去什么支付等等等等,诶得得能够有一这样一个平台才行,对不对?好,那你要想有这样的一个平台,你就得有一个什么呀,你就得有一个是不是电商系统去。
05:16
支撑这样的一个平台,对吧?OK,那咱们这个所谓的电商系统,就是我们提到的业务系统啊,是这样的啊,OK,那我们的这个数据仓库的数据都是来自于哪儿呢?都是来自于咱们这个所谓的业务系统啊,是这样的啊OK,好,那我们来自于业务系统的数据,咱们之前是不是提到过可以分为两类啊,对吧?哪两类啊,诶一类呢,是位于数据库当中的这个业务数据对不对?还有一类呢,是我们通过买点获取的什么东西,用户行为日志对不对?好,那现在我们大家知道有这两两类数据了,但是大家知不知道就是这两类数据它是怎么来的?对吧,就是业务系统里边为什么会存在这样的两类数据,那完了之后呢,我们为什么要把这两部分数据给他拿到我们的数据仓库里边去进行分析统计呢?大家有没有考虑过这个问题?
06:08
大家做采集项目的时候,可能之前并没有考虑这些啊,做采集项目是不是只是啊,就是机械的把这两部分数据给他拿到了HTS之后就完事了呀,对吧?啊,但其实并不应该这样,咱们得深入的考虑一下,就是我们这两部分数据它为什么会出现在业务系统,对吧?那我们为什么要拿它,诶这个放到要把它放到数仓里边去做分析统计,咱们得分析分析,那首先咱们得先搞清,搞清楚数据它是怎么出现的,哎,大家想一想,我们业务系统的这个数据库里边,那它的数据是怎么来的呀,他是怎么来的呀,怎么来,咱们得先搞清,先先搞清楚,就是这个数据库里边它都有什么数据,它里面放的什么数据。放的是有什么商品信息啊,什么用户信息还是什么呀,什么订单信息,什么支付记录信息,是不是有这些东西啊,对不对,这东西怎么来的呀?其实道理很简单,各位同学咱们来想一想啊,你想假如说我这儿呢,有一个电商系统对不对,这是咱们电商系统的后台对不对?OK,那大家想一想,那我们呃,这个正常情况下,一个电商系统我们除了有自己的后台,我们还会有什么呀,是不是有各种各样的,相当于是客户端呀,对不对,当然这个客户端我们呃形式非常多,我可能是一个PC端的页面,我也可能是一个什么呢?手机端的APP,对吧,那也可能是什么呢?啊,比如说一个什么小程序等等的,是不是都有可能啊,对吧?啊,现在客户端非常多,非常多是这样的啊,但甭管是哪种,对吧,我们用户是不是都会在客户端里边去完成购物的这样的一个过程啊,对吧,比如举个例子,但现在假如有一个人有一个新用户,他现在注册了,那你说他在这个客户端注册的时候,他会怎么样适合完我们的电商的后台发送一个请求啊,对吧,这个请求里边会包含这个人的各种各样的信息,对吧,因为你注册。
07:46
课的时候得得填入各种信息嘛,对吧?好,那完事来想一想,你说我后台接收到这个信息之后,他得干啥,他得把这个信息保存起来吧,你不能说我用户注册完之后,我后台的信息没了,那肯定不能行吧,对,他得保存下来,那他保存在什么地方呢。
08:03
保存哪啊,它得持久化才可以,你不能直接放在内存里边,内存里边当当我这个系统要挂了,是不是就没了呀,对吧,你必须得持久化才行,持久化你得放在哪,放到磁盘上面对不对,那你放在磁盘上面,你最简单最直直观那种方式放在哪呢?放在一个文件里边行不行。行吧,你放文件里边是不是这个就能够持久化的保存起来啊,对吧?但是你放文件里边这个好用吗?不好用什么?为什么不好用?你想一想,等将来时间长了之后,哎,我这个文件里边数据不会越来越多,当你再想去从从里边查询某一个用户信息的时候,是不是就太慢了呀,对吧?是这样,所以说我们肯定不会把它放在一个单纯的文件里,我们通常会放在什么里边呢?那就是关系型数据库啊,没错吧?OK,那也就是说我们会把什么用户的信息存在这个关系数据库里边,OK,那那我们再继往下思考,那用户注册完之后,他将来是不是有可能会去下单,会去支付啊,对吧?那你想一想,用户下完单之后,那他的下单的记录,咱们要不要保存,也要保存,那你保存在哪呢?也是数据库里边呗,对不对,那再继续往下进行,那你支付是不是也要保存到数据库里边等等等,OK,那你看数据库里边的数据是不是就是这么出现的呀,对吧?也就是说当我们用户再去做各种各样的业务操作的时候,那都会往数据库里边去记录一些关键信息,那大家想一想,你说这些关键信息对于我们的分析而言有没有意义?
09:22
那显然是有意义的,比如举个例子,我拿到所有的订单记录,我能够分析什么呀?比如说分析我这个某一个记录,我的订单总额是多少,对吧?我拿到所有的支付记录,我能够分析某一个季度或某一年的我的支付总额是多少等等等等,是这个道理吧,兄学们,那所以说这些数据对于分析而言是有非常重要的意义的,既然有意义,我们是不是才需要把他们拿过来,放到书仓里边去进行分析统计啊,诶是这样的,OK,这一点咱们得搞清楚好了,那这是业务数据的一个来龙去脉,咱们先给他搞清楚,那接下来我们再看这个用户行为日志,那用户行为日志是怎么来的,大家还有印象没有?是不是通过一个技术叫做买点对吧?所谓的买点是怎么做的呢?那买点当然种类非常多啊,那在这儿我们以最典型的前端为呃前端买点为例给大家解释一下啊,所以前端买点呢,就是怎么样,就是在我们的一个前端的页面上面啊,去干啥呢?去嵌入一小段javascript代码,GS代码对吧?那这个GS代码它能够实现什么样的一个功能呢?
10:22
能实现什么功能,就是你在这个GS当中,哎,你能够让这个GS呢,它去干啥呢?哎去监听,哎就是我这个页面当中所有元素的这个行为,比如举个例子啊,所有元素这块我提到的是什么呢?比如说按钮,比如说这个图片,比如说输入框,比如说超链接等等等等各种各样的元素,那在这个GS弹当中呢,我都能够进行一个所谓的监听,那只要诶用户比如说点了某个按钮了,诶或者说我,呃这个在某个输入框里边输了什么信息了等等等等,我这段代码是不是都能够抓取到啊,对吧,那抓取到之后他会把这个信息发送到哪儿啊。发送到一个我们专门用来接收这个用户行为日志的一台日志服务器上面,对吧,那日服务器接收到这个请求之后呢,就会把什么呀,把这个日志是不是落盘写到日志文件当中啊,对吧?OK,那这个诶用户行为日志它是这么来的,那大家想一想,那这怎么来的,咱们知道了,那家想一想,你说这个用户行为日志对于我们的分析而言,它有没有什么作用呢?
11:23
有没有什么作用啊,有没有什么意义啊,那肯定是有意义的,你想一想啊,你通过这个用户行为日志,是不是能够了解我们用户的一个行为习惯呀,对吧?诶你能够了解他的用户行为习惯,那我又能怎么样呢?我们是不是就能够根据他的行行为习惯去改进我们的系统,或者说去做一些针对性的推荐呀,等等等,是不是这些东西啊,对吧?是这样的,这个咱们大家稍微的理解一下,那所以说那我们的业务数据和我们的用户行为日志,那他们对于我们的数据分析而言都是非常有意义的,既然有意义,那我们是不是才需要去把他们的数据给他拿到数据仓库里边去分析统计啊,对吧?这一点咱们得先搞清楚好了,那数据从哪来,到目前为止咱们就已经搞清楚了,好,那搞清楚之后,咱们接下来往下进行啊,那数据就位于这两个地方,那咱们是不是得想办法把它放到数据仓库里边来啊,对不对?那怎么放过来呢?
12:15
这是不是就咱们之前做采集项目干的事儿啊,对吧?那这里边呢,我们需要借助一些数据的同步或者数据的采集工具,把数据的源源不断的给它写到数据仓库里边来,没错吧?OK,那大家来看一看,我们之前在做呃,业务数据的同步的时候,我们主要用了两个同步工具,对吧?一个是对X,还有一个是谁ma well,这俩东西大家现在还有没有印象?没有印象了啊呃,我们说data叉,它是一个基于什么的同步工具来着。查询啊,那Maxwell是基于什么的来着。Blog啊,数据变更日志对不对,咱们好像没学一样的,这个一会咱们好好复习一下啊,这个咱们暂时先不展开说了,一会儿咱们再单独的去复习一下这个采集项目啊好,那现在呢,我们先回忆起来,就是我们在做业务数据的同步的时候,或采集的时候,我们用的是这两个工具啊,对吧,这个两个怎么用啊,然后他俩到底是怎么回事,咱们一会儿再简单的回忆一下啊好,那暂时先不多说了,接来往下走,那下边呢,我们看这个日志,日志我们是使用谁同步的,使用去同步的,这个应该还记得吧?啊,这个还记得啊,好了,那到目前为止呢,那我们这个数据从哪来,他怎么到数仓里边咱们就已经复习完了,其实之前咱们采集其实做的就是就是啥,是不是就这些采集做就这些啊好,那接下来我们继续往下走,那采集做完之后,咱们把数据给它放哪了。
13:35
还应该还记得吧,啊,咱们甭管是哪个同步工具,最终是都放在了HDFS的一个路径上面了,对吧,比如现在数据就放在了HDFS上的文件上了,好了,那到了HD2之后,那咱们你说下一步我们得干啥。下边干啥?下一步干啥?下一步你肯定得把这个数据放到哪,肯定得放到have里边去吧,涉及到里面,因为咱们数仓,数仓是不是是以have作为这个主体的,对吧?那说白了,那那你将来你这个数据都得进到have里边,都得变成一张一张的什么呀,表都得变成一张一张二维表,对不对,那所以说我们现在要做的下一步肯定就是干啥呢?就是把这些数据给它放到我们have的表当中,应该是这个道理吧,对吧?那我现在问一下大家啊,我怎样能把HDFL文件放到have的一张表里。
14:24
是不是load一下就行,还里边我们往一张表里写数据,是不是两种方式啊对吧,一个是ins inside的,一个是load,对不对?那现在我们是不是就是把文件放到表里,是不是就是load就完事了,对吧?哎,就是将来的我们这儿会有一步就是漏把数据从文件诶给它漏到have的表当中,诶实际上是这样的一个操作好了,那假如说现在呢,数据已经来到了我们的数据仓库,已经进到have里边了,那接下来我们要做的一个工作是什么呢?这个可能大家现在就想象不到了啊,接下来我们要做的个工作呢,就是对数据进行建模。对数据进行建模,那这个数据的建模到底指的是什么呢?现在大家可能还不太好理解,给大家简单的说一下啊,我们在这儿所谓的为数据进行建模呢,就是对数据进行更加合理的诶,更加有条理的一个存储和管理啊,什么意思啊,就是咱们数据啊,我们从业务系统当中直接同步过来,它会非常的混乱,非常的杂乱,对不对,那OK,那到了数仓里边之后呢,我需要把这个杂乱的数据给它整理的非常的清晰,非常的哎,有条理啊,是这样的,那这个我们把数据进行合理有效的存储,合理有效的整理,那这个步骤呢,我们就称之为建模,OK啊好,那最终我们这个数仓建完模之后,它长什么样呢?
15:41
长这样。大家可以看一看啊,我这里边呃,是不是画了几个几个小块啊,对吧,那这个每一个小块我们称之为一个什么呢?我们称之为数仓,这个模型当中的一个分层啊,这是一个层啊,这个层呢叫ODS层,这个叫DWD层,这个叫DWS层,这个叫ADS层,这个叫DM层,那整体看来咱们这个树层你建完模之后,它是一个分层的模型,对不对啊,是这样的啊,那可能大家现在并不清楚这个分层是什么意思啊,也不知道ods是啥什么,DWD是啥,你不用管,现在都不用管啊,现在我们只需要知道哎这样的几点就行了,首先第一点你得知道这个所谓的一层里边啊,它存放的就是一一堆什么呢?就是一堆表。
16:22
第一层它会有一堆的表啊,是这样的,那第二层的也会有一堆的表,那你也不用不用知道ods啥意思啊,你知道是第一层啊,这是第二层,这第三层就完事了,那第三层也是一对坐表,哎,咱们得知道这一点,那其次呢,我们还得知道一点啊,就是我们每一层的数据它是从哪来的,你比如说我们第一层的数据它从哪来。因为咱们现在是不是在搞这个数据的链路啊,对吧,数据从前到后怎么走,咱们得搞清楚啊,第一层数据从哪来。是从我们采集是不是传输到的那个目标路径而来啊,对吧,你得从那个路径是不是到第一层对吧?那第二层的数据从哪来的,你要知道它是从第一层来的,那第三层数据从第二层来的,后边一层是从前一层来的,哎,也就是咱们这个数据呢,是逐层往后进行的,能理解吧,然后我们每一层都会对这个数据进行呃,一些特定的处理,第一层我会做一些特定的处理,那从第一层到第二层我再处理一下对不对,那从第三层到第四层呢,我再给他处理一下,是这样的啊,也就是说我们数据仓库里边的数据呢,是逐层进行处理的,诶,这一点咱们先搞清楚好了,那到目前为止,那咱们这个数仓里边的数据是什么样的,咱们大概就清楚了啊,那咱们现在只需要知道每一层里边就是一堆表,然后呢,数据呢是逐层往后走的,诶这一点咱们先给他搞清楚行了,那到目前为止,那数仓来咱们这个里边就已经有数据了,对吧,那完之后我们在继续往下思考啊,前面我给大家提过说数据仓库它并不是数据的最终目的地,对吧,这个。
17:50
我说过了啊,OK,那数据的最终目的地应该是什么呢?对,应该是数仓后边的各种数据应用,对吧?所谓数据应用那都有啥呢?那最最常见的,最典型的就是所谓的BI应用对吧?那或者说还有一些比较简单的应用,比如说报表应用,呃,那这里边提到了一个报表,什么叫做报表呢?呃,所谓报表其实也说实话也不难啊,也不难理解,所谓报表呢,就是啊干啥啊,就是把数据要用一些更加生动,更加形象的图形给它表示出来,那这就是所谓的报表啊,将来呢,咱们这个数藏项目,我们在做完之后呢,我们也会有一个简单的报表,OK,那大家简单看一看,这就是所谓的一个报表,那你想一想,这个报表它展示的数据肯定是来自于哪的呢?
18:32
肯定也是来自于数仓的,对不对,是这样的,OK,那这就是我们这儿,呃这个呃,给他模拟的一个就是数据仓库的一个数据应用,那在这儿呢,就是一个简单的报表,当然数仓的应用呢,会非常非常的多啊,就是你数仓打好之后,它是我们企业当中的一个核心的一个数据资产,那我们后边各种各样的应用都会从数仓里边去拉取数据,这个咱们稍微的理解一下好了,各位同学,那到目前为止啊,就是我们这个数据,它从前到后这样的一个完整的链路,咱们是不是就打通了呀,相当于对吧,数据从哪来,他到哪去,咱们就已经搞清楚了,好了,那接下来呢,我们继续往下思考,来大家想一想啊,你说我们将来咱们去做这个数藏项目,你说咱们的核心的工作应该是什么呢?
19:14
核心的工作应该是应该是哪一块吧,咱们就说哪一块,核心的工作其实应该是哪啊,应该是中间这一块。能理解吧,那你说中间这一块是不是都是在汉里边搞的呀,对吧,那你说我们这里边具体的工作应该是什么。啊对,写三扣是一部分,那当然还有一部分是什么呢?就是建模,哎所谓建模,咱们其实说大白话啊,说大话你建模,建模你最终落地之后肯定是什么,说白就是建表对吧,你得知道你ods层第一层你有应该有什么样的表,对吧?然后呢,每张表我的这个表的结构应该是什么样的,所以表结构大家这个概念有没有听过呀。呃,所谓表结构的,因为咱们汉里边表都是二维表,对吧?所谓表结构呢,就是你得搞清楚它的每行数据是什么,它的每个字段应该是什么,咱们都得搞清楚,就是所谓的表结构,以后我只要提到表结构啊,大家就得反应过来,表结构就指的是什么呀,我们这张表的每行指的是什么,每个字段指的是什么,就是每行每列嘛,它是二维表啊,是际样,咱们得搞清楚,OK,那就是我们做数仓,我们的一个主要的工作就是数据仓库的建模,诶你得知道诶每一层有什么表,每一张表的表结构应该是什么样的,OK,那光见表行吗?
20:26
不行,对吧,我们这个表建好之后,你中间是不是还得有什么呀,是不是这个数据的处理的逻辑啊,对吧?你第一层表建好了,第二层表建好了,那你第一层的表的数据它需要经过什么样的处理?呃,来进到第二层呢?你中间是不是会有一个计算的逻辑啊,对吧?OK,那这个计算逻辑说白了就是干啥呢?写三个那里,你想啊,是不是从一张表把数据查出来,然后再写到我们的后边的一张表,这不就是一个circle,一个ins inside加select语句吗?是这个道理吧?OK,那也是说白了,将来咱们做这个数据仓库,咱们的核心的工作就是建表加写词口。
21:00
啊,就是这样的啊,那所以说大家呢,这个have必须得熟才可以,必须得熟才可以,好了,那接下来咱们继续往下思考,那假如说各位同学,我们现在就已经把这个数据仓库它的表都建好了,那三号呢,我该写的我也都已经写好了,那你接下来思考下一个问题,什么问题呢?就是咱们整个数据仓库啊,它怎样运行。它怎么运行,或者说我们在运行这个数据仓库的时候呢?哎,我们应该怎么样,应该注意哪些问题。呃,可能我直接这么说,大家不太好想啊,不知道怎么回答对吧?啊,那现在大家先回答我一个问题好吧,回答一个什么问题呢?就是说你说咱们这个数据仓库里边的这些,呃,这个表我建好了啊,建好了然后呢,Circle我也已经给他写好了,对不对,那你想一想,我这个circle它自己会运行吗?它自己会运行吗?他肯定不会自己运行的,对不对,你放那它自己不会运行的,对吧?你得怎么样才能执行,你你得去执行,你得去调那个三后,它是不是才会执行啊,对吧?啊,这个大家应该是能够想明白的,OK,好,那现在我们在调这些脚本的时候,咱们大家应该注意到什么问题才行,你调这些circle课的时候,对吧?你执行这个三克,你执行这个三克,你这个你在执行他们的时候,你应该注意哪些问题。
22:14
哎,有同学提到了顺序对吧,这个顺序确实非常的重要,顺序确实非常重要,为什么呢?你想一想啊,呃,我是不是必须得保证我第一层到第二层的这个circle执行完了,也就是数据由第一层已经到了第二层了,我是不是才能执行后边这个circle是这个道理吧?诶,这个顺序它必须得保证,这是哎非常重要的,这一点大家能想到是非常不错的啊好,那接下来我们还有什么问题需要去注意?还有什么问题需要注意?还有什么问题啊,其实是这样的,还有一个问题就是这个我也是问大家吧,我问大家啊,就是还有一个问题是什么呢?就是说咱们这些任务啊,就是这些circle对不对,他是只需要执行一次就完事了吗?并不是的,为什么?并不是这个道理,其实很简单,大家想一想,就是我前面的这些业务系统对不对,它产生的数据它是只产生一次嘛,那肯定不是啊,业务系统是不是一直运行,一直运行就会一直有新的数据产生,对吧?这新的数据有新增的,有变化的,是不是永远源源不断的产生,对吧?你只要这儿产生了,那我数仓里边这些,诶,这个计算任务是不是就得再跑一遍,你只要这儿有新数据,我这边是不是就得一直去运行,是这个道理吧,那也就是说我们这些circle呢,它应该是怎么执行的?
23:29
应该是重复去执行的,是这样的,你不能说这个circle只执行一遍那就完事了,对吧,那他得重复的去执行,好,那既然这些circlele要重复执行,那咱们大家呃,就得提到一个问题啊,就是我们在运行这些SQ的时候呢,我们得用到一个什么东西呢?能够想到一个什么概念?你想啊,它得重复的去运行,对吧,你今天跑了,你明天还得跑,你后天还得跑,大后天还得跑,对不对,你这应该能想到一个什么概念,定时没错,这个时大家应该是能够得能够想到才行啊好,那定时咱们这儿之前学过一个什么东西。
24:03
Current type吧,Cn tab应该学过吧,哎,林斯当是不是有一个这样的一个定时任务啊,对吧,这个应该是能够想到的啊好,那我们暂时呢,先不去讨论,就是current type他能不能胜任我们这个数仓里边的一个定时这样的一个任务,能不能先不用考虑他能不能胜任这个问题啊,OK,那咱们暂时先考虑另一个问题,什么问题呢?就是既然你要定时了,对不对,那OK,那我这些任务他应该在什么时候跑呢?定时吧,定时你是不是得给他规定一个具体的时间呀,对吧?那这些任务应该在什么时候跑呢?呃,半夜跑。资源空闲的时候跑。呃,其实大家这么理解是不太合理的啊,首先半夜跑这个是对的,但是原因啊,不太准确啊,不是说资源空闲的时候再跑,并不是这样的,那为什么一定要在半夜跑呢?这个我需要给大家解释一下啊,那首先各位同学咱们得知道,就是咱们这个做的这个数仓项目,我们是一个什么样的数仓,是离线数仓,大家应该都听过,就是我们这个数据的处理呢,主要分为两类,对吧,离线加实时对不对?OK,那现在问一下大家,大家是怎样理解离线和实时的呀?
25:12
离线事实怎么理解的呀?呃,其实离线和实时呢?呃,它正好对应我们这数据的两种处理方式,一个呢是批处理啊,对吧,假如说这个是离线啊,那它对应的是batch,是推批处理,OK,那实时呢,对应的是哪种处理方式啊,是流处理对吧?一个是Bach,呃,然后呢,一个是stream,是这样的,OK,那这个流和P大家是又是怎么理解呢?流批对吧?那其实流是怎么意思,怎么个意思啊,流其实很简单,流就是啥呢?就是我数据呢,是源源不断的产生的,那我这边是怎么处理,是实时的处理,来一条我处理一条,来一条,我处理一条来一,或者说你像SPA stream来一小批,我处理一小批,来一小批,我是源源不断的处理,对吧?来这叫实时,OK,那你实时处理的结果会不断的怎么样呢?
26:01
会不断的更新对吧,因为你一直计算是不是就一直更新啊,对吧?哎,这叫实时处理啊,OK,那这个,呃,所谓的这个离线处理对吧?那它所对应的这个批处理又是怎么一回事呢?啊,数据它不管它是怎么产生数据,我可能是一线产生,也可能是源源不断的产生,对不对,它产生无所谓,但是我在处理的时候呢,我不是来一条算一条,我是怎么办呢?你数据你假如说你还是一直一一直源源不断的产生,对吧?但是你过来之后,我不算,我怎么什么时候才算呢?我攒着,我攒够一批之后,再进行一次统一的处理,哎,这叫所谓的批处理啊,是这样的,那咱这个数仓其实就是一个离线数仓,我们用的就是批处理,就是批处理好,那既然是批处理,我们必须得考虑一个问题,什么问题呢?就是你这一批啊,是怎么定义的。对吧,你你攒这一批数据,我怎么就算攒够一批了呀,对吧,那这一批我们通常怎么定义呢。啊,就是在离线出仓里边这个P,我们通常是用什么定义啊,用时间去定义,用时间去定义啊,就是多长时间的数据我算作一批啊,算作一批在这个时间的单位通常是什么呢?通常就是天啊,也就是说我们通常就是把一天的数据我攒一批,对吧?攒一批之后呢,这一天的数据我进行一次统一的计算,好那我现在问一下大家,你想一想,你这一天的数据什么时候才能攒够呢?什么时候才能攒攒完呢?
27:28
你是不是得是到了晚上24点的时候,你才能攒完这一天的这一批数据啊,对吧?那所以说你既然是24点之后才能这个攒完,那你算得什么时候算了,是不是肯定得是24点之后才能算了,对吧?所以说咱们算数据数三离线数仓里边任务是不是都是得得在什么时候跑啊,半夜跑啊,啊,其实是因为这个是为了攒够这一批数据,那当然你每天去计算的数据是哪一天的呀。是今天的吗?并不是离线数仓,我们通常每天计算的数据都是前一天的,为什么是前一天,是不是就是因为这个呀,对吧,这一点咱们得给他搞清楚好,那这实际上呢,就是我们这个,诶定时的这个时间,定时的时间也就是我们这个时间呢,诶应该在每天晚上的24点之后去跑,但是呢,我们通常情况下不会让他正好从24点开始跑啊,为什么不会让他正好从24点开始跑呢?这个大家其实可以想想为什么。
28:21
因为你想就我们数据啊,从业务系统到数仓,它中间是不是有一个采集通道啊,对吧,那这个采集通道是不是也会经历一点时间那里吧,假如说举个例子啊,那现在有一条数据恰好就是在,诶我这个前一天的,比如说23:59对吧,59秒产生的对不对,那这个数据到我这个数仓是不是可能就会到第二天呀,对吧?那以说你这要正好从24点开始跑,你是不是那条数据你就算不了了啊,是这样的,那所以通常我们会把这个时间往后推一点,比如说我们会在每天的,比如说是00:10开始去跑,哎,咱们这个计算任务,哎,这一点咱们给他搞清楚啊,是这样的啊好了,那这个定时,那这个时间咱们基本上就给它搞清楚了,对吧?好,那接下来咱们继续往下进行,呃,下边咱们考虑一个什么问题呢?就考虑一下咱们前边提到那个所谓的c typeb c type是不是专门用来做定时的,对吧?好,他能不能胜任我们数据仓库当中的这个定时任务。
29:17
能不能让他去帮我们定时调度。这些思考能不能。可不可以,可不可以咱们来分析分析啊,大家要知道啊,就是我们书藏里边circle不是只有一个,有很多对吧?是不是这一层会有很多circle这一层也有,这一层是不是也有啊,对吧?而且这些circle考他们之间是相互独立的吗?不是,它其实是有什么的呀,是有依赖关系的,对吧?我们不是必须得保证这个跑完了才能跑这个,这个跑完了才能跑这个,对吧?哎,那口上typeb它能调的是什么?口上它不是又掉一个命令啊对,是不是调一个SHLL命令啊对吧?哎,那一个SHLL命令能不能执行一下,色口可以是不是have-1HAVE-F都可以啊对吧?所以这个肯定是可以的,但是大家要知道,一个口have,一个定时任务是不是只能调一个命令啊?对不对?那我这个circle是不是有一个命令,对吧?你需要用它去调,那我这个circle呢,是不是也有一个命令,也要让它去调,对吧?那我这儿是不是也有一个circle,是不是也要让它去调啊,对吧?但是你要知道啊,这几个任务在可type看来它是怎么样的呀?它是三个对不对?OK,那三个是不是得配三个定时的时间对不对?那你想一下这个我让他什么时候跑呢?这个好说,第一个你可以让他,比如说就是每天的00:10去跑对不对,OK,那这个呢。
30:26
这个就不好说了,对吧,这个咱们知道你得等前一个跑完,是不是才能跑这个对吧,但是前一个什么时候跑完,这个就准确的时间咱们可能就不知道了,对吧?那我们只能大概估算一下,比如说这个任务他一个小时就能跑完,那他要假如说一个小时能跑完,那我这个任务呢,是不是给他定到01:10对不对,那这个一个小时,那这个我是不是定到02:10去跑啊,对吧?哎,但是你这么估算是不是有时候可能不准确啊,你可能会出现什么样的一个情况呢?前一个任务。还没跑完第二任任务开始了,那这个显然是不是会出问题啊对吧,那所以说可能太吧去做这种任务的调度的时候呢,就显得有点就是不够用就不够用对吧,所以说实际上我数仓里边这个定时任务不是用可cap去做的,那我们用什么去做呢?诶在这儿呢,给大家介绍一个我们数据仓库当中的一个,诶就是常用的工具,这个工具呢,哎,其实它是有一个可以说有一个学名叫做什么学名呢?叫做工作流程定时调度器。
31:25
工作流程定时调度器,那我刚才说的这个学名啊,是不是有两部分啊,对吧?哪两部分一个是工作流程,一个是定时调度,对吧?定时调度这个其实很好理解,咱不多说,咱们重点说一下这个工作流程,什么叫做工作流程啊。工作流程,工作流程有一个英文名称叫做work flow对吧?诶那工作流程它有什么样的特点啊,咱给大家简单解释一下啊,实际上工作流程它通常具备以下两个特点,第一个特点就是啥?就是这个工作流程它是由多个工作单元组成的,工作单元组成的一个,两个,三个,四个,五个,六个,诶这是一个工作单元,而且这些工作单元之间它不是相互独立的,它是有前后的依赖关系的,比如举个例子啊,第一个诶跟第二个有这样的依赖关系,那第三个依赖第二个,诶走走走走,它是有前后的依赖关系的,什么意思呢?就是你得保证你先做第一步,第一步做完再做第二步,第二步做完再做第三步,那这就是所谓的工作流程的两个特点,OK,那其实工作流程在我们生活当中,这个例子也是比比皆是,对吧?比如举个例子啊,不知道咱们同学有没有喜欢做饭的啊。
32:28
都喜欢做饭同学吗?没有是吧?来就是假如说啊,咱们现在比如说我现在自己想去做一道美食对不对,那你假如说你现在想吃什么什么东西,那要想自己做,那首先你得先干啥呢?你你你你当然你要是有菜的话,你可以先洗啊,你要是没菜的话,你就得先去买菜啊对吧?哎,你得先去买菜对吧?菜买回来之后呢,得干啥呢?是不是得简单的这个呃,摘一摘呀,对吧,你得摘一摘菜对不对,那摘完之后呢,是不是就可以清洗了呀,对吧?那洗完之后呢,啊就可以切了,那切完之后呢,就可以炒了,那炒完之后呢,嗯,看情况吧,你厨艺要是行可以吃,厨艺要是不行的话,就直接可能就到了,对吧?啊就这样一个流程,那你看啊,这其实就是一个典型的工作流程吧,对不对,你这个步骤是不是前后不能乱,对不对啊,你不能说我这个菜还没洗呢,我就先吃上了,那肯定不行,对吧,那这个一定要给他搞清楚,这就是一个典型的工作流程好了,那我们这个所谓的数据仓,呃,所谓的这种工作流程定时调度器,它调度的是什么呀。
33:28
就是这样的一个一个的工作流程,那其实大家可以看一看,你像我们数仓里边的这些计算任务,你说他算不算一个工作流程,它算不算肯定是算呀,对吧,你想一想啊,这是不是一个工作单元,这是不是一个工作单元,这是不是也是一个工作单元,对吧?那他们之间是不是有前后的依赖关系,所以这就是一个典型的工作流程,所以说这种工作流程我们通常是用谁去调度的呢?是用这种工作流程定时调度器去调度的,OK啊好了,各位同学,那接下来我们继续往下思考,其实这种工作流程定时调度器呢,它非常的多啊,那咱们这儿看到的这个呢,叫做dolphin scaer,这个dolphin是什么意思呢?呃,海豚的意思叫做海豚调度器啊,这款调度器呢,是呃,咱们最近比较火的是一个国产的工作流调度器啊,是这样的啊,当然类似的这个工具非常的多,比如说什么阿斯卡湾啊,比如说什么air尔flow,比如说屋Z,那这些都是类似的这种工作流调度器啊,是这样的啊,那现在呢,咱们国内用的比较多的,其实就。
34:28
就这个dolph sc,所以在这儿呢,咱们这个项目使用的就是dolphin sc OK啊,那这种调度器非常的多,非常多,我们没必要把每个都学一下啊,啊但其实咱们大概应该掌握什么呢?就是这种调度器的一个使用逻辑,那其实他们你虽然虽然非常多,但是你用起来你就发现使用逻辑基本是相同的,那基本上都是啥样的呢?首先你要想使用这个调度器去调度你的任务,你首先得先告诉他什么呢?就是你这个工作流是什么样的,你得先告诉他,OK,我这个工作流程里边,诶有哪些工作单元,然后呢,我这些工作单元之间,咱们的依赖关系是什么样的,谁依赖于谁,谁依赖谁,谁先谁后,你得先给他说明白了啊,是这样的,这是咱们使用这种调度器的第一步,好第二步是什么呢?就是定时了,对吧?工作流定时调度器嘛,对吧,定时OK,那这个定时要注意了,我们使用这种调度器去调度咱们这个工作流的人,你那个定时的时间,你不用像可time那样可time,二是不是得把每一个步骤它的时间都给它定一下啊对吧,你要注意这种定时调工作流定时调度器,你只需要告诉他一个什么样的时间就行了,对工作流的开始时间就可以了,你只要告诉他什么时候开始,那OK,那他就会,诶先提交第一个诶任务,第一个任务跑完之后呢,诶是不是他会自动的去触发第二一个任务啊对吧,第二个完成之后自动的触发第三一个,诶是这样的,那这样一来是不是就不会再出现咱们前面提到的什么第一个跑完了,还没跑完第二个就开始了,不会出现那种情况了吧。
35:54
对不对,是这样的,这就是咱们这种工作流定时调度器的这样的一个作用,这样的一个意义,好了,那到目前为止啊,那咱们这个数据仓库的一个核心架构基本上就完整了,其实大家可以想一下啊。
36:07
当我们把数据仓库这一整套链路都开发完了,然后呢,我们用这种调度器把整个数仓调度起来了,那数仓是不是就会每天自动的运行了呀,没错吧,它是这样的一个流程,哎,咱们这个得给他搞清楚好,那这就是咱们这个数据仓库的核心架构,OK,核心架构咱们讲完了啊,那接下来呢,再给大家简单说一下啊,就是我们甭管是自自在企业里边咱们去做数仓啊,还是说我们现在在学习这个数仓项目,对吧?你说咱们这里边最重要的内容就是什么呀?最重要的内容就是我刚才提到的一个是数据仓库的建玩啊,那还有一个呢,就是啥呀,就是写三稿啊,是这样的啊,所以说咱们大家呢,在学习咱们这个数据仓库的这个,呃,这个过程当中,就是在十几天的这个呃课程对吧,那咱们整个过程当中,大家一定要把重心放在这两点上边,一个是数据仓库的建玩,一个是写circle啊,尤其是这个circle课基础比较差的同学啊,啊,一定要利用咱们这个呃书藏项目这个机会,把这个自己的S库水平呢给他往上提一提啊,是这样的啊,行了,那到目前为止,数据仓库的核心架构咱们也就说完了,来,我把这个视频停一下啊。
我来说两句