00:00
接下来,我们一起来看一下第三章核心概念。那这也是我们学习蝴迪的一个前置的基础。那就像比如说你要了解一台电脑啊,你说你懂电脑,那么你是不是得了解电脑的各个构成,还有它每个东西,每个组成部分,它的是什么意思,对吧?啊,那比如说你要了解电脑,你是不是得了解什么叫CPU啊,有哪些厂家,分别有哪些系列,呃,它的型号分别有什么区别,功能怎么样,这个你是不是得去做了解啊?另外呢,比如说你是不是还得了解它的内存条?对吧?啊,是什么频率的,多大的啊,有可以插几条等等,再者呢,你是不是还得了解显卡是不是啊等等,还有它的硬盘,主板等等一堆事儿,那这些是不是你了解一台电脑要去看的一些事情,那同样的道理,我们了解一个护底,那么它特有的一些概念我们也要首先了解,那首先呢,我们看一下3.1基本概念。
01:04
那第一个呢,就是时间轴。那这个时间轴怎么理解呢?其实就是什么?这你看看这个图,这是不是一个时间线对吧?那么中间的每一个点,上面的每一个点都是一个时刻,对吧?那其实就是什么呢?它这个时间轴在不同的时间点上都记录了我们做的每一种操作。嗯。那这个怎么理解,拿我们生活中的例子来比喻,比如说你一个人在一天当中,你对他做了一个记录,那比如说啊,早上呃,六点他起床刷牙洗脸,诶,你记录一下,比如说你拿个小子把它记下来。那再者说呢啊,到了六点半啊,他蹲了个坑啊。那你记录一下,那再比如说七点他吃完早饭出门了啊,出门啊,然后怎么样怎么样,就按照这个时间的发展,在每一个关键的时刻呀,啊,每一个动作,每一个行为,你都将它记录下来,那记录下来有什么用呢?你是不是可以方便去回看呢?比如说到了晚上,呃,八点了,你想回忆一下,诶,早上八点钟我在做什么,你是不是看一下你这个记录就可以了,那同样的道理啊,啊呼地里面的时间轴就是这个意思。
02:27
它就是一个时间线啊,随着时间推移的一个时间线,那你的每一次操作。他都记录了下来,这个就是它的一个时间线啊,时间轴啊,也有的翻译为时间线,还有呢,就比如说我们一些博物馆,不是有一些历史类的博物馆,那它可能会设计一个走廊或者一个展厅是什么呢?呃。每一年的重大事件,比如说1921年这边发生了什么什么事件,再往下一个。资料图片,它是比如说一九啊多少年,1931年啊,然后这边有什么重大事件,在1932年什么重大事件,三三年什么重大事件,那这个也像是一个时间轴啊,我们走过这个回廊,就像穿越了历史时空一样。
03:17
好,那刚才是简单来理解这个时间轴的概念,那我们具体来看一看,在这当中。每一次记录的东西叫做什么啊?它有一些特有的叫法,那首先第一个名词呢,就是instance。这个怎么翻译呢?咱们可以理解为石刻。啊,那我们我这边执译是翻译成了及时时间,也就是说每一个时刻,就像刚才举的例子,诶,这个六点半这个时间点你做了什么事,对吧?呃,七点钟这个时间点你做了什么事啊,这具体的某一个时间。对应的事儿啊,就这个具体某一个时刻,这个就是instance啊,所以呢,我们可以想象得到,呃,湖底上面的这个time life上面就是有一个一个的instant。
04:09
每个instant就记录了对应的时间,还有我们的操作。那这个instant有这么几个组成部分啊,大家看这个图instant,一个instant有三个部分,第一个你做的动作啊,就像刚才例子啊,你六点半你的动作是什么啊,是起床洗漱对吧?这就是咱们记录下来的action。另外一个是不是时间点呢?T,也就是说是什么时候发生的啊,六点半这个就是这个太state,就是一个状态,这个是属于,呃,它的状态有三种啊,一种是来我们看这里。已经调度尚未执行,或者正在执行,或者已完成,也就是说他当前的状态,干这个事儿是干的怎么样了,是正在准备做呀,啊,还没还没具体做对吧,还是说正在做还是已经做完了啊,这就是一个状态的概念,那么具体来看一下啊,这个action最护底当中有哪一些东西啊,那看图更直观一点啊,你看有comm就是提交对吧,还有清理。
05:18
还有增量提交,还有这个compassion,也就是翻译成压缩或者合并啊,那还有一个什么回滚保存点啊。那这个我们先留一个简单的印象啊,但大家知道这些动作。先对我印象有这么一些啊,那我们具体来看一看吧,一个commit commit表示将一批数据原子性的写入一个表,那么大家注意了,这边有几个关键词啊,一次提交表示什么?一批数据,另外一个词是什么原子性?写入一个表啊,这边是这个含义。好,那这个清理呢,就是会清理我们旧版本的文件啊,就是做一个清理操作啊,你不再需要了,不再呃成为垃圾了,那我就是啊,把你清理掉呗,另外一个就是这个德尔塔commit,这是增量提交的意思。
06:14
增量啊,关键词是增量,另外呢,还是一批数据,还是原子性,大家注意这边特指的是某一种类型的表才有这个增量提交这个概念,这个这个单词也留一个印象啊,后面我们也会介绍啊,一般简称Mo啊,读时合并。这个就涉及到我们后面要介绍表类型啊,它主要有两种啊,那Mo呢,是其中一种,Mo就有一个增量提交这么一个事儿啊,另外呢,这个合并呢啊,其实就是什么呢?你看合并内部差异的数据结构。也就是说我有多呃多个版本,或者我做了更新了啊,比如说将更新操作从某一个地方合并到另一个地方。
07:03
呃,举个例子啊,呃,但是这些概念我们还没闹啊,就是它有一个东西叫基本文件。啊,就是这种n Mo的表啊,可能有一个基本文件,它是part的格式,这个我们先简单了解,简单理解啊,那每一次的增量提交,它是直接写到这个基本文件吗?不是啊,他每次的增量提交都会写入到一个log结尾的文件当中啊,每次提交都会写到一个log文件当中,那既然数据都不在一起,那回头你是不是得干嘛呀,把他们合并到一起去啊,对吧?那比如说他们一起合并,所以把这里的数据啊都合并到这里来啊,这是其中的一种合并,那还有一种就是回滚呢,也就是当我们写入啊,不管是commit还是增量commit啊不成功的时候,他会进行回滚。他会把他的一些临时文件给删掉啊。
08:00
还有一个safe point。将某些文件组标记为已保存,以便什么不会被删除,诶,所以这个时候我们知道这个point就是什么,避免被这个清理操作给删掉啊,它会做一个标记啊,仅此而已,那它的目的和作用也很明显,就是呃作呃,使我们的数据有个备份嘛。好,这个是action啊,Action就动作啊,我们简单一起输,看这张图啊就行了,其实意思也很直白啊,那时间呢,时间通常是一个时间戳,那你看比如说这个。大家注意,他不是说按我们那个UTC那个时间抽啊,从1970年1月1日00:00:00开始,那个时间说不是啊,它是年月日十分秒这么一串数字,那你看2019年1月17日一点。啊,13分49秒是这种时间戳啊,那么这个按照动作时间的顺序是是不是单调增加了,为啥呀,我们的时间是不是正常来讲,记录是不是由早到晚啊。
09:13
是吧?那这个状态刚才讲过了,一个是还没开始。一个是正在正在执行,一个是已经执行完毕啊,这是这个动作对应的一个状态,好,那最后一个呢,我想强调的是一个时间的概念。时间的概念,这边的时间我们要区分两种概念,第一个就是忽底去做提交,也就写入的这个时间。或者说咱们可以理解为数据到达湖底的时间,因为你commit数据不就进湖底了吗?对吧,Commit不就写入湖底了吗?啊,那这个时候其实也就是到达湖底的时间是吧?那么大家知道数据本身是不是也可能携带时间啊,所以另外一个东西叫event t,那这个地方呢,大家可以联系一下flink当中的时间语义fli flink的时间语义是不是有三个呀?啊,一个是什么?处理时间,注入时间,还有事件时间,那我们有时候在处理数据的乱序这些问题的时候,是不是要采用一个事件时间呢?按照数据本身携带的时间来啊处理。
10:23
那么在护理当中呢,我们也是可以区分这两个概念啊,一个是护理处理的时间,第二个是数据本身的时间。为什么呢?这种其实还是为了处理迟到数据啊,我举个例子啊,有一条数据,它是比如说八点钟产生的,那这个时候这条数据比如说携带的一个时间戳啊,就是今天早上八点,但是呢,由于我们需要将数据采集,最终写入固体对吧?或呃,可能中间由于网络延迟或者各种故障异常原因啊,但是最终我们入户底的时候可能已经08:10了。
11:05
对不对,这中间是不是就有一个时间差,好,那我们再来个极端的例子,那再比如说我是八点,我是按小时来做一个分区,这个分区大家就理解一下have表的那个分区就可以了啊,比如说我按小时分区,油条数据是08:58生成的啊,然后由于各种原因,我写入护理的时候已经09:01了,对吧?那么如果你按照这个commit的时间,那么这条数据是不是就会被写入到。九点的那个分区,但是这条数据明明是08:58产生,是不是应该进入八点的分区,是不是啊,这个就是我们取事件时间的一个意义所在,那么看一下忽Di对于这种事是怎么处理的啊,那么看上面这张图就可以,呃,这边采用了还你看啊,也是按照小时作为分区字段,也就是说一个小时是一个分区,对应一个目录。
12:04
大家用have的那个分区来理解就可以了啊,那么从十点开始陆续产生各种commit。啊,从十点开始,那么10:20的时候,来了一条九点的数据,意思就是这条数据是九点产生的,但是到了10:20啊,他才commit到咱们的户体表里面去啊,那这个时候根据事件时间这条数据啊。啊,我们这个分区字段可以用数据的它本身的时间来做分区嘛,对吧,你是九点,那你自然应该落到什么,写入到九点的分区,这个是没问题的,也就是说它能够落入对应的分区里面去,那这问关键就在于那我在读取货地表数据的时候,我在消费的时候,呃,怎么拿到这条迟到的数据,这个是不是算迟到啊,我时间已经10:20了,但是九点的数据刚来。那这个也没事,我们只需要按照正常的这个到达时间去过滤就可以了,这条数据我们我们增量去消费的时候,比如说我是消费十点钟以后提交的数据,Commit过来的数据,那么九点的这条数据它是10:20才提交过来,那么我们也是能够消费到。
13:21
说这么多,就是想表达一点,呃。我们不用去担心迟到数据消费不到,第二个事儿呢,迟到的数据,嗯,他该落入哪个分区,还是能够落入哪个分区,当然前提是咱们这个用法是对的啊。好,这个是一个时间概念,应该也好理解啊,总结起来就是这张图啊,一个时间线啊,每一个时刻都记录了一些事儿,那每一个记录当中分为什么时间,还有做了什么事啊,现在处于什么状态啊,这么三个东西。
我来说两句