00:00
咱们刚才呢,已经把这个阶段的划分咱们已经给大家讲完了,那接下来呢,我们来说一下咱们的任务到底是如何切分的,那么咱们这个阶段呢,其实分很多,那么咱们之前讲过,当一个阶段它完全执行完毕之后,它才可以什么呢走下一个阶段,所以每个阶段之间是不是独立的呀,同学们,那如果是独立的话,他们的计算任务应该也是独立的,那么到底我们的这个任务是怎么切分的,我们来看看我们的代码啊来,我们回到咱们之前的这个位置,咱们后退后退,后退啊,回到咱们的这个创建的这个位置啊,回过来,回到这个椅子以后,咱们往下看下面的这个地方呢,它当阶段准备好之后,它会有一个job啊,把那个job给他提交,然后呢,接着往下,下面呢,这边会有一个什么呢?我们叫submit stage,叫提交阶段,他会把咱们的阶段呢给他提。
01:00
提交,大家可以发现他提交的是不是这个final stage啊,他会把咱们当前的这个阶段给他一次性提过去,但是由于它里面包含了其他阶段,你可以理解为是把整体提交到后面去了,对不对?然后呢,我们再来点击,点击submit stage,那么它会把咱们的阶段呢取过来,取过来以后他在这里面会干嘛呢?做一些判断,这个判断当中,其中它有一个叫get missing parent stage。什么意思呀,看看你有没有上一个阶段,Missing丢失parent stage叫丢失上一级,看你有没有丢失上一级,说的简单点,我们从这个他来看看有没有上一级,他有没有上一级,那你明显他是有的,他是没有的,对不对?所以呢,他这里就有个判断叫做its empty,如果你没有上一级,那么就会提交它里面的阶段的任务,但是如果你有上一级的话会怎么办?诶,提交上一级的阶段,所以大家会发现我们这个传进来的是redo stage级,那么这个时候你会发现他有没有上一级,他有他有上级的话,但是我们的这个staffle map有上一级吗?没看到,那没看到的话,是不是就意味着他会执行什么操作,它会执行咱们当前的提交任务的操作,所以我们点一下,点点完以后,到了这一步当中,咱们往下看,记住它是。
02:33
把当前的阶段传过来,所以当前的阶段的这个位置它就传过来了,传过来以后,然后往下走,往下走咱们看关键性的点,咱们不可能把每行代码都看明白,咱们看关键性的点,关键性的点就在我们下面的这个位置,来咱们找一下。这个地方就是我们的task,这个task就是用来接收咱们的任务呢,那这个task它怎么来计算的呢?咱们往下看,它里面会有一个叫做stage,这个stage会有个模式匹配,模式匹配当中它会判断你到底属于哪一个阶段,诶大家会发现咱们当前提交的这个阶段是不是叫Le map stage,那么我们这个里面就应该是它了,那么如果匹配的话,大家看一下它干嘛了,它这边会有个叫parts to叫计算分区。
03:27
那么你计算分区的话,它会有一个map,那么map呢,会做转换,把每一个ID变成我们的task,也就意味着真正创建task就是在这儿创建的,你有几个task,你就会创建几个对象,对不对?那好,所以到底这个map前面的这个parts to返回的是什么就尤其重要了,所以我们点它一下点。点完以后大家会发现咱们现在这个地方叫什么呢?叫stage.fund missing parts,所以把这个拷贝我们点一下点点完以后它是一个抽象的对不对?咱们知道咱们回过去后退,后退,咱们这里不是叫沙Le map吗?我们点一下,点完以后它里面会有一个叫fund missing parts,那么在这个地方大家会发现它有一个叫什么呢?叫做get or else,看一看你当前的那个ID当中有没有那个分区,如果要是什么呢?有就过来,如果默认情况下没有的话怎么办?那么就是零。
04:34
Until叫number part是顾名思义就是我们的零和part的数量,那么until是不包含,那么不包含的话,举个例子,你有五个分区,那么零到五,但是不包含五是不是01234呀,所以01234的话,那么我们后退,后退的话,那是不是就意味它是一个集合,它如果是个集合的话,那么就意味着我们的每一个那个数字就会变成一个task,而那个零恰恰是你分区的索引编号,就意味着我们点一下你拿到的它里面其实就是你的分区编号,01234的感觉就是这样,所以我们回过头来,你会发现咱们的这个里面的RDD,它如果记住啊,同学们,它是从这个RDD里面去取,从它里面取的话,这里面有012有三个,它就会有三个task,所以咱们任务是如何切分的,就是每个阶段的最后一个R。
05:35
它的那个分区的数量,所以啊,我们总共的任务呢,应该是每个阶段它最后一个RDD分区数量之和,比方说咱们当前这个stage,它的RDD里面有三个吧,对不对,而这个它里面也有三个,那么总共是多少个,六个,所以当前咱们给大家画的这个图的操作应该有六个task这个任务就是这么算出来的好不好,同学们,就是我们这里就不画图了,咱们把源码稍微看一看,你知道它是根据我RDD的分区来得到的就够了啊。
我来说两句