00:00
那上节课呢,我们也分析了,在我们的项目当中啊,一共有这么多需求,那这么多需求我们用哪些技术来实现呢?啊,接下来我们就看一看技术的选型,那在技术选型之前呀,我们要分析一下技术选型所要考虑的因素,首先第一个叫做基于数据量的大小来进行选型,那你假设我们的数据仓库每天只有一兆的数据,那一兆的数据你说我们用什么存储来比较合适,这个时候我们是不是就不需要用HDFS了呀,一兆的数据量啊还是非常小的,我们呀用my circle来存储啊就可以了。好,再往下看,第二个基于业务需求来进行选型,那大家想一想啊,我们现在做的这个叫什么呀?我们现在做的数仓叫做离线数仓,除了离线数仓,还有一个数据仓库叫做实时数仓。那大家想一想,我在做离线数仓的时候,你说我有必要把实时数仓我也给你一起做出来吗?
01:04
哎,其实是不需要的啊,实时数仓它的数据时效性要求要高一些,那我们现在只是在做离线数仓,我们对数据的时效性要求没有那么高,什么时候我们对数据的时效性要求更高了,那这个时候我们再来考虑实时出仓,好,那说到实时出仓了,我们就要想到实时数仓有哪些计算框架。那大家可能比较熟悉的Spark。那在Spark之后呢,还有一个组件叫做flink。那Spark和FNK我们又选择哪一个呢?在早期的时候啊,大家都在用Spark来做实时数仓的计算引擎,但是近几年啊,弗林还是比较火的,那弗林德刚出来的时候啊,大家还并没有选择去使用它,那一般都是谁在用的,一般都是你像阿里呀,腾讯呀这种大厂,他们开始的时候他们在用flink,那等着flink的技术啊,他越来越成熟了,以及在行业内的经验越来越丰富的时候,那这个时候你说我们能不能选择用flink了呢?哎,这个时候我们就可以选择使用了啊,因为大家都在用了,那么这个时候我们就能用了。好再往下看开发维护的成本,在我们的这么多个需求当中啊,每一个需求它都会有很多个组件来可以实现,那这些组件我们又应该怎么选择?我们选择用哪一个好了?你比方说有这么一个功能,它有两个组件可以实现。
02:37
那第一个组件呢,它的功能比较丰富,但是它用起来比较复杂。那第二个组件功能相对来说是比较少的,但是呢,它用起来比较简单,那这个时候你说我们是选择用起来更复杂的呢,我还是选择用起来更简单的呢?那用起来简单的它的开发维护成本相对来说肯定要低一些,那复杂的它的开发维护成本肯定是要高一些,那这个时候我们怎么选择,这个时候我们就要基于我们公司的这个需求来进行选择了,你比方说我们呢,需要用到更多的功能,那么这个时候我们就要选择开发起来啊。
03:26
那这个时候即使你用起来比较复杂,哎,我们是不是也要选择你呀,因为我们用的功能比较多,你是支持这么多功能的,那我们现在是小公司,我们用不到这么多功能,我们用的功能比较少,那我们就可以选择开发维护成本更低的这些组件啊好,再往下看,基于总成本的预算,那有一些组件呢,它就是花钱的,有一些组件呢,它就是免费的,同样的一个功能,他们两个都能实现,那你说我们是选择花钱的呢,还是选择免费的呢?
04:02
那有同学说,那我就选择这个免费的呗,免费的他不花钱呀,但是人家是花钱的,肯定是有花钱的道理的,花钱的他用起来更简单,然后功能呢也更丰富,那这个时候我们就要基于总成本的预算来进行考虑了,如果说在我们的成本预算当中啊,诶我还可以接受,那么呢,我们也可以去选择这些花钱的,但是我们的成本预算已经比较紧张的时候了,那我们呢,就选择开源免费的就可以了啊,咱们下来。好,那接下来我们看一看数据采集和传输啊,那之前我们也分析了我们的数据啊,分为用户行为数据和业务数据,用户行为数据的采集呢,我们用的是来做那业务数据的采集啊,我们用的是data叉,好,那不管是用户行为数据和业务数据,他们最终的目的地啊,一个是离线输仓,一个是实时出仓啊,那哪些组件它是用来同步到实时出仓,哪些是用来同步到离线输仓的呢?哎,我们看下边啊,这个地方已经给我们标记上一个颜色了,那红色的呢,它是实时和离线共用的,那蓝色的是离线输仓啊,绿色呀是实时输仓的啊啊黑色的呢是我们不采集的,那我们先看看吧,这个这个叉啊,它这个颜色比较特殊。
05:23
好,那data叉啊,它是用来做这个离线同步的,我们通过data叉把数据同步到我们的离线输仓,那红色的是什么呢?它是我们实时和离线公用的啊,那之前我们也分析了这个F啊,它是采集我们的用户行为数据的,那既然是采集用户行为数据,那这个用户行为数据它既需要给到实时数仓,也需要给到我们的离线数仓啊,诶,那到这儿我们想一想卡夫卡我们要不要用呢?那我们分析一下啊,我们的这个数据的背景啊,哎,我们项目的背景是什么呢?是电商,那既然是电商的话,我们就要做活动,那只要是做活动,我们的数据量就会激增,数据量一激增,我们就可能遇到哎数据峰值的这么一个情况,那所以说我们要用到卡夫卡来进行一个消峰啊,卡夫卡必须要用,那么我们的数据啊。
06:23
带路应该是这样的呢,数据过来之后,哎,先发送到卡夫卡,哎,然后再由卡夫卡发送给离线数仓和实时数仓,那么卡夫卡它既是实时数仓需要用,哎,离线出仓呢也需要用啊OK,那接下来我们再看这个Maxwell,哎,那它为什么实时和离线都要用呢?哎,它呀其实啊主要是针对于这个实时数仓来使用的,但是离线数仓有一部分我们也需要用,那离线输仓的这个同步啊,我们分为增量同步和全量同步,全量同步我们用的是对叉啊,增量同步我们用Maxwell啊OK,所以说这个Maxwell它既是实时数仓需要用啊,离线数仓呢也需要用,那接下来我们再看看这个scoop啊scoop呀,它其实跟这个叉的这个功能是一样的啊,用来做全量数据同步的,那么本次项目当中我们呢没有?
07:23
采用scoop,我们采用的是data叉啊,那在以往的项目当中呢,我们用的是scoop,那本次项当中我们用一个全新的工具啊data叉啊data叉呢,现在在市面上的占比啊,已经是越来越多了啊,那接下来我们看诶这还有一个logitch,它呀也是用来做数据采集的,那它跟的功能类似,来做这个日志传输的,那它呢,一般呢是用在这个数据量比较少的情况下才用啊它呢不是和大数据的场景,那我们呢,现在是大数据的场景,所以说我们用哎芙蓉来做,OK。
08:00
接下来我们看数据存储,那数据存储啊,我们基于数据量的大小来考虑,我们把它给它存储在HDFS上,那这个是离线数仓的数据存储,那实时数仓我们用h base还有RA来存储啊,我们把flink还有Spark计算出来的数据,我们呢给它存储在HP和red当中啊,以及我们的这个MYQ,哎,我们的离线出仓还有实时数仓的这个结果数据啊,我们最终给它存储在买circleq当中啊,OK,方便于我们这个可视化的工具来进行查询展示的。好,那接下来我们再往下看,哎,Mango DB,那这个呢,我们一般会把机器学习的数据啊,以及爬虫的数据啊存储在mango DB当中啊,本次项目啊,我们没有积极学习以及爬虫,那mango DB这个数据库我们哎不采用啊,好,再往下看,看看数据计算,那数据计算。
09:01
离线计算呢,大家都知道,哎,可以用have来做,那实时计算呢,可以用辅Li来做,那s Spark呢,它既可以做实时啊,也可以做离线,那由于这个flink,它的技术现在已经越来越成熟了,实时输仓啊,我们就用flink来做,那Spark呢,哎,我们用它做这个离线啊,哎,那有同学说了,那离线的计算我们用的是have啊,哎,对啊,其实离线的计算我们现在用的既不是have,也不是Spark,我们用的是什么呢?我们用的是have on Spark,哎,我们把它俩呀结合起来使用啊,OK,好,那这个to呢,它也是用来做实时的这么一个框架啊,只不过呢,它比较老,它比Spark还要老啊,那所以说我们就不采用了,那T子呢,它是用来做离线的,哎,它呢也是一个离线计算的引擎,那它是基于内存的,哎,我们呢不采用啊,数据量比较大,你基于内存来计算,哎,不太合适。
10:02
那接下来我们看看数据查询,哎,准确的说呀,这个是啊,计息查询,那什么是计息查询呢?你像我们的领导啊,他突然给我们提了一个指标啊,提了一个指标的需求,那这个需求呢,它并不在我们每天计算的这100多个指标之内啊,它是一个呃,独立的指标啊,给我们临时提出来的一个,那有同学说了,那我写一个have serve呗,哎,我给你计算出来不就完了吗?但是这个时候老板比较急呀,你写一个have circle,那可能要统计两小匙,那肯定不行,那怎么办呢?这个时候我们就要用到计息查询的工具了,哎,那计息查询的工具啊,它的响应速度啊是非常快的啊,那计息查询一共有这么多工具,我们用哪一个呢?啊,关于离线的记息查询,我们可以用前三个,那实时的息查询我们可以用哎,后三个啊好,那离线的这个记息查询工具啊,我们就选择press啊,实时的呢,我们就用click house,好讲下来。
11:06
接下来我们看数据可视化啊,什么是数据可视化,我们之前也说过了,那数据可视化呢,就是把我们离线数仓和实时数仓统计出来的指标给我们展示出来,哎,通过一些图形化的方式给我们展示出来,那数据可视化的工具,哎,它也有这么多啊,关于离线数仓的可视化,我们用的是那实时数仓的这个可视化呀,我用的是啊,啊,你像quick BI和data v呢,那这两个是收费的工具啊,那我们就不采用了,好。那接下来我们看看任务调度,那什么是任务调度呢?它是离线数仓的一个概念,在我们离线数仓当中呢,你看我们是不是数仓进行了分层啊,有四层嘛,哎,那每一层我们是不是都有很多个表啊,那第一层的表我们到达第二层,然后到达第三层,最终到达第四层,那好了,那你说我第三层我这个表它需要进行统计了,它是不是得依赖第二层啊,那我第二层这个表它需要统计了,它是不得依赖第一层啊,哎,他们要有一个依赖的关系,那有同学说了,那来吧,那我从第一个开始执行,然后我再执行第二个,第三个,第四个,那我们就单独执行这四条circle的话,你说我们能控制的了,我第一个执行完了,我再执行第二个,然后第二个执行完了再执行第三个吗?啊,以此类推啊,肯定是不行的,那除非每天哎凌晨之后你就在那等着,你把第一个赛号先执行了,执行完了你再执行第二个啊,那你就来吧,这些事你等着吧啊啊。
12:42
那如果说我不想每天在那等着,我想通过一个工具来帮我实现的话,能不能呢?诶是可以的,Dolphin scheduler这个工具啊,他就可以来做任务调度,他呢就可以帮我们判断一下任务执行的状态,当我前面的这个任务执行完了之后,他才会帮我执行哎后面的这个任务,好,那这也就是任务调度工具啊,那任务调度工具呢,我们一共也有这么多,那在早期的时候我们用的是阿斯卡班啊,那现在呢,我们一般都用这个刀分schedule的啊,那阿斯卡班呢,它也是一个比较轻量级的框架啊,而且用起来呢也比较简单啊,那dolphin schedule呢,它也不算太重啊,用起来呢也比较简单,那wood呢,它就是一个比较重的框架了,但是它的功能相对来说要多一些。
13:36
好,那最开始呢,大家是在这两个工具当中来选择啊,一个是比较轻量级的,用起来简单,那一个是呢比较重的,那它的功能要多一些,那后来呢,Dolphin scheduler它来了,哎,它呀是中国开源出来的这么一个工具,它既功能多,而且呢还比较清亮,哎,所以说我们现在就选择dolphin schedule,那还有一个好处,中国某公司开源出来的啊,页面是中文嘛,对我们中国人来说就比较友好,那air pro呢,它是国外的一个公司来开发的啊,它是用Python语言来写的,那如果说你们的这个公司啊,他这个老板比较喜欢用Python,那你可以选择air flow,好。
14:23
集群监控啊,那什么是集群监控呢?你像我们这个大数据平台是不是要安装很多个组件呢?那有这么多组件,如果说他挂了,那我知道吗?哎,我不知道,所以说我需要通过一个集群监控的工具啊,我把它给监控起来,那监控起来之后,他一旦挂了,那么就会给我们报警,那我是不是就可以及时的做出一个反应呢?哎,我如何把我的这个任务或者是这个组件呢,给他恢复啊,啊那关于离线的监控,我们用的是扎贝克,那实时的监控啊,我们用普罗米修斯啊,都能学习得到,都是开源的工具,当然原数据管理啊,艾特拉斯啊,什么是原数据管理呢?
15:09
还是啊,你像我们的大数据集群之间呢,是不是一共有很多个表啊,那表和表之间它都有依赖关系啊,哎,那你像十个表20个表,这个依赖关系我们是能履行的,那一旦我们集群之间,哎,我们这个数仓里啊,表的数量有几百了啊,上千了,那么这个时候表和表之间的关系我们就记不住了呀,那怎么办呢?这个时候我们就需要用到一个原数据管理工具,用它来帮我们整理表和表之间的关系,好。接下来我们看权限管理,那权限管理我们有这么两个框架,那三啊,它是CDH啊,这个公司开发出来的,那render呢,它是HDP这个公司开发出来的,那什么是HDP啊,什么是C,我们稍后给大家来做一个详细的讲解,大家现在就知道有这么两个框架就完事了,好,那后来呢,他们两个合并,合力的开发出来一个框架叫做CDP,好,那这个CDP啊,哎,它最终使用的是rangeer,哎,他们两个合并之后,一致认为rangeer这个工具它比较好用,那最终呢,就保留了ranger啊三呢就不用了,好,OK,那这个就是我们的技术选型。
我来说两句