00:00
好了同学们,那我们接下来呢,就给大家解释一下啊,这个血缘关系和这个依赖关系啊,他们的一个作用到底是什么啊,嗯,首先我们刚才说过了,咱们这个在10BUG中啊,旧的RDD和新的RD之间他们就有依赖关系,新的RDD就用到了旧的RDD,所以他们就依赖于旧的R对不对?那好了,那这个我们的这个关系,它会怎么办呢?它会保存下来,那么会保存在每个RDB当中,所以啊,咱们这里说一下来,咱们写上就是我们的每个DD,它会什么呢?它会啊保存。保存什么呢?它会保存我们的血缘关系啊,咱们叫血缘关系,所以简单点就是它会保存他们之前的一个血缘,这个怎么理解呢?不好理解,所以大家看啊,我们来拷贝,拷贝以后我们拿过来给大家解释一下来。大家看一下啊,咱们举个例子,我们现在呀,比方说我们的RDB4是第一个我们的什么,我们的RDD,然后呢,做操作啊,大家看啊,我这个为了让大家理解方便,比方说咱们举个例子,咱们做了个什么操作呢?来做了一个我们的这边啊来。
01:13
咱们在这边记住啊,这是一个旧的RD啊,它做了一个什么呢?叫flat map,它做了一个flat,诶诶咱们叫Fla map,嗯,好,他做了这么一个操作啊行,然后呢,我们这个呢,R3呢,他也做了一个操作,他做了一个什么操作呢?他做了一个我们的map操作啊,然后呢,我们的这个他呢又做了一个咱们的什么叫reduce key的操作,可以吧,诶reduce by key的操作,所以啊,你会发现我们的它做了一个操作之后,变成了一个新的,那么他俩就有依赖关系了,而他呢,通过map又产生个新的,他们俩有依赖,然后呢,我们的主就是by key,诶产生它也会有依赖,那么这个时候大家想一想,如果假设我在这个环节我出现了错误的话,怎么办?
02:04
就是说在我们做聚合的过程当中,我们失败了,你失败了怎么办呀?同学们,你们想想,那老师简单,你失败了,我重新在读数据不就完成了吗?不行。为什么呢?因为你要是失败的话,我问同学们,你从RDD再走一遍行吗?感觉这好像没问题对不对,但是我们前面提出了一个。概念,我们RDD会保存数据吗?RDD是不会保存数据的,对吗?它如果不会保存数据,那么这个时候一旦我们这个地方出现了问题,他这样又没有数据怎么办,怎么办呀?同学们,所以在这种情况下,他需要怎么办?他是不是需要从头读啊,可是他怎么知道他的头在哪儿啊?大家想一想,就意味着你怎么知道你的头在哪儿呢?你现在是记住你在这儿失败了,你是不是就得到它了?你得到它,它如果什么都没有保存的话,他知道他的数据源在哪吗?他是不是根本就不知道?
03:08
所以啊,为了我们的这种容错性,就是在我分布式计算当中,一旦出现错误的话,我们可以重新计算,那我必须要把它们之间的关系保留下来,所以啊,我们说一下RD是不会保存数据的,那么它为了啊,为了提高咱们的容错性啊,容错性它需要。将我们的什么,我们的RDD间的那个关系,它保留下来,或者叫保存下来啊,保存下来。然后再来复制一下,一旦出现了我们的错误,它可以根据我们的这个依赖关系,或者叫血缘关系吧,血缘关系将我们的这个数据源啊恢复啊,或者说数据源重新啊读取进行计算,诶,进行计算,诶,所以啊,它就有这样的一个能力啊,所以这个是非常好的,否则一旦你出现错误的话,它又不保存数据,然后呢,你都不知道数据源在哪,那整个作业不就失败了嘛,对不对,所以它就是我们的数据源啊,咱们给它写清楚,这个呢,我们叫做数据源啊好了,那如果这个叫做数据源的情况下,那么我们这一层一层的到最后不就是我们的结果嘛,对不对?好了,那他这是怎么保留下来的呢?很简单,同学们看啊,来拷贝,拷贝以后咱们复制,复制过来,咱们往下走啊,咱们往。
04:30
好了,往下走,往下走的话,记住啊,同学们,首先第一个我们的RDD4,它来读取数据源的时候,可能比方说make r DD可能是那个text file,对不对,所以啊,他在这个时候呢,他会把这个我们的数据源保留下来,比方说他就告诉你我们是我们的text file,诶这个操作去读取的数据源,然后呢,那个路径呢,比方说是我们的date,然后呢,我们叫做word啊点test。所以啊,他可能啊,就是这样的一个我们的依赖关系,他告诉你什么呢?告诉你我现在是怎么读的,哎,他会这样,所以啊,这里我们给他一个我们的,嗯,来啊,记住他现在会保留就是这个RD式呀,他会把这个给他记录下来啊,他会记录下来的话,记住这就是他们的一个依赖关系,他知道他从哪读的对不对,所以一旦出现错误的话,他从这个位置就可以找到数据源了嘛,就没问题了。
05:22
那好,那么当走到这儿的时候记住了,那他就要想一想了,这个RD3是怎么来的,它是会发现呢,它其实是RDD4,它通过flat map得到的,所以就意味着它这里是不是应该保留我们的那个Fla map套作呀,它的知道它是怎么来的,所以它会有个叫Fla map。可是你光有个flag的是不够的,为什么你只知道你的flag map是从这这来的,但它里面的东西你不知道吧,所以怎么办,你还得把这个再给它放过来,所以啊,我们的箭头应该是这个样子,记住啊,在r de3呢,它应该保留成这个样子,然后呢,我们再往下,诶,所以应该是这个样子啊好了,那么我们现在呢,再来往下,那同样道理,RD3变成它是不是通过map来的,那所以这个操作呀,记住啊,它都会给它保留下来。
06:14
它如果都会保留下来的话,那这个地方就应该是什么呢?应该是我们的map,所以把这个呢,我们诶拿过来把它放到这里啊,那这个呢,就应该是map了,嗯,好,然后把这个箭头呢放过来,所以一旦呀,大家看啊来,一旦咱们的这个地方出现了错误,那我就完全可以从这开始执行,经过Fla map,再经过map,再重新得到它,再来走reduce key是不是就够了呢?对不对,所以啊,如果即使这个地方出现了错误,他通过依赖关系是可以什么找到咱们数据源再重新恢复的,这个就是它保留血缘关系的一个作用,记住了是每个RDD都有这个能力,它都会保存它的依赖关系,这都是可以的啊好,我们说了半天,我们接下来给大家的稍微的演示一下,好把这个呢,我们去掉啊,那么这里呢,我们来,咱们在RDD里面,我们new,咱们创建一。
07:15
它咱们叫dependency,我就简写了叫DP啊依赖关系好在这里呢,我们点击new创建我们的类,咱们写上Spark,嗯,零一。然后呢,我们叫RDD叫做D啊,我们的依赖,嗯,好了,写完之后在这里呢,我们写上啊,咱们的man,嗯。呃,那么这个呢,就跟前面一样,这个我觉得呀,咱们就可以把咱们前面的代码就原封不动拿过来就可以了呀,同学们啊,因为什么呢?因为我们word count其实就里面就有依赖呀,对不对,所以直接拿过来啊,但是文字性的东西咱们不再要了。好,把这个呢,我们去掉啊,然后把这个东西咱们都去掉啊,怎么简单怎么来了啊,然后这个呢,我们不要了啊,然后这个呢,咱们也不要了,嗯,好不要了,以后同学们看啊,咱们这么来,这个不叫哎,咱们这个简单点啊。
08:07
咱们叫一,嗯,一不太好。嗯。咱们改一下,咱们叫hello啊SKY,咱们叫hello啊Spark简单一点啊。嗯,好了,然后把这个拿过来啊,咱们叫做dates,写上一个咱们叫word,点我们的text行,那这个时候啊,同学看啊,我在这个位置,我们就打印,咱们叫lines,点点什么呢?我们叫做to debug string,这个deb string就会打印它的血缘关系,记住啊,我说的是血缘关系,我说的还不是依赖,因为依赖是相邻的两个,我现在要看的是一个完整的,所以这个叫血缘关系啊好,然后呢,我们再来啊,这个为了大家看的清晰呢,我这里中间啊,咱们加上一个分割符星号,诶好了啊,然后呢,我们拷贝,我再把这个它就是你的这个Fla map的这个操作呢,我们再给它打印一下。
09:05
好,再来,我们再把这个它,哎,Flight map和这个map我们再编一遍,哎,所以翻过来,好再来把那个reduce by kid我们再给它拿过来啊,就是它,所以这个放过来行了,那咱们有四个星号,那么中间就会夹杂着它的血缘关系,我们现在来运行一下,看一看结果,看看跟我们刚才说的这个东西有没有什么区别啊。来,我们现在呢,运行一下,看结果吧,同学们。好了,同学们,现在结果已经出来了,对吗?那我们首先就一步一步的往上看啊,从上面开始,大家有没有发现,当我们走完这个叫tax file的时候,其实他已经把我们的血缘关系怎么了已经给他列出来了,它是我们的tax file来实现的,然后呢,有个叫date是叫word t吧,哎,所以说它经历了这样的一个过程。
10:02
啊,形成了一个RDD,这是它的血缘关系啊,然后呢,当他走Fla map的时候,大家有没有发现它会在我们的这个叫做test fair的基之上干嘛呢?加了一个叫Fla map,没问题吧,同学们,我们刚才刚才画图是一样的呀,在这个记录之上是不是多了一个flat map呀,哎,就是这样啊,好,再来往下,下面就是我们的什么map,它是在Fla map的基础之上,又把map给它加进去了吧,哎,又加进去了,好,然后呢,再往下,下面是不是叫reduce by key,所以下面这边就有个叫reduce key,但是这个地方呀,有个比较特殊的地方,就是说他们现在呢,给它断开了。断开了以后,它表述了一个概念,叫做shuffle。就是中间它存在了佛的操作,这个到底为什么有了杀佛就会导致它中断呢?这个我们后面会给大家解释啊,我们后面会再详细的去解释,现在你就知道它这个地方是有一个杀的概念就行了,那么我们的这个一是什么意思呢?其实啊,它表述的是一个分区的意思啊,这是一个我们的分区,它是一个分区,哎,就是这么一个概念啊,那这个呢,我们就先说到这里啊,同学们,所以说我们这个打印的内容跟咱们画图的效果基本上是一样的,所以啊,咱们同学们要把这个依赖呀,血缘呢,以及这个保存的信息呢,有一个大概的了解,这样的话,我们后面学习一些相关的知识点的时候,就会容易明白了。
我来说两句