00:00
刚才我们给大家讲了一下咱们的沙uffle的一个原理啊,咱们通过画图的方式给大家稍微的咱们介绍了一下啊,这个其实就是我们沙的一个演变过程啊,就是你把这个原理搞明白之后,就知道我们怎么能够提高我们的一个沙uffle的一个什么性能了,那好,我们回过头来,同学们,我们再说一下另外一个问题,咱们这个地方,同学们看啊,咱们说了数据打乱重新组合就会有沙Le,那咱们这个位置上其实就有沙Le对不对,你看同学们就这个位置。它就会有沙否,那么它有沙否的话,那么沙否之前的这个RDD所形成的分区任务是不是应该写磁盘,同学们想想是不是这样的。什么意思呀,你在这个地方是要落盘吧,对吧?沙普要落盘吗?那么你这个地方难道不写磁盘吗?那你的这个地方不应该读磁盘吗?所以说我们的任务它应该有读和写的区分,对不对?那好,咱们回过头来看,这个叫s map stage,我们回过头咱们找一下啊来,呃,我们找哪呢?把这个该关的咱们先全关掉,然后我们去找一下,咱们叫DA schedule啊,在它那个地方我们的,诶在这,在我们上面给大家准备task的时候,同学们看,如果你是s map stage的话,你所创建的这个task叫s map task,你把task去掉是不是叫sle map呀?就是sle的map阶段,所谓的map阶段就是将数据打散的阶段,后面有个叫reduce阶段,我们称之为叫做什么呢?聚合的阶段对不对,所以啊,这个跟map reduce当中那个感觉是非常类似的,所以啊,从字面函义上来讲,这个沙Le map task。
01:43
就应该写磁盘对不对?好,那你回过头来再往下看,那这个边的我们的任务呢,是不是应该读取磁盘呢,对不对,应该就是这样啊,所以呢,一个读一个写,我们来找找看看是不是这样的来首先我们的sle map task我们点一下。
02:03
点完以后,我记得之前给大家讲过,我们的task在执行的时候会调用它的一个什么run方法,大家还记得吗?在run方法当中,它里面其实是有一个叫做什么呢?叫run task,这个run task在我们负类当中其实是一个抽象方法,那么必须在子类中重写,这个咱们讲过对不对?所以啊,咱们的这个sle map task,它应该是有那个run task方法的。好了,在咱们的这个当中,咱们往下看,你会看见这么一个跟写有关系的,往下看,大家看一下有个什么东西啊,叫suffer writer processor,还有一个叫write,这是不是写的意思啊,对不对,同学们就是这个概念,别的不管它,就看到了写,那好,你写的时候我们点一下往下看,往下看有一个叫做s writer。然后呢,有个叫get write,取得一个写入的对象对不对,然后呢,往下来看下面的这个地方呢,有一个什么呢,咱们往下,哎,一个叫做right吧,就在这了。
03:07
所以啊,在这个地方,它去真正的去写入去了啊,就是这样,那这个write我点一下点点完它是一个什么呀,它是一个抽象了,所以我们点一下,点完以后这边有三个writer,这个我们先告诉大家,有一个叫salt soft writer,这个咱们后面解释,我们先走过去,咱们点过去。点过去以后,它里面就会有一个什么呢?我们的right,这个right当中有个叫sort,用来做排序的,然后呢,往下有个叫output write,是用来做输出的,其中咱们会发现在它的里面就有什么东西呢,就有个什么commit all partitions,就上面有个什么呢,Right partition的map of right,所以这些东西呢,它都有,我们可以简单看看,咱们点一下,点这个东西呀,诶我们后退吧,后退以后他这边我们先看这个吧,咱们这个我我想想啊,咱们先点它,点它以后咱们往下走啊,它里面有一个什么东西啊,有一个什么saled reable partition的,所以他这里面会拿到我们的迭代器,迭代器以后呢,他这里面会什么呢?进行我们的操作,往下去执行做一些操作,然后后对后退以后,他这边就会什么呢?就会去commit提交,所以我们点点完以后拷贝,然后咱们找一下,在这个地方有一个叫local Dis本地磁盘的操作,所以我们找到它打。
04:26
开打开以后往下来,往下来以后别的咱们不用看,你看到什么东西了。叫做right index file,我们and commit,字面含义是不是那个索引文件和提交啊,那么你提交什么东西啊,点点完以后你看in that file,你再往下看,其实下面还有个东西,下面有一个什么呢?叫data file,咱们不用把代码看全,咱们看一些关键的名称和我们的代码,你看这是不是叫数据文件,这是不是叫索引文件,然后呢,他这边会把临时文件改名成我们的索引文件,改名成我们的数据文件,这个就跟我们之前画图就是一样的,咱们最终的在我们刚才的这个位置,是不是就是索引文件,这个数据文件,所以啊,在他写的过程当中,其实就是把这些文件给他生成好了,诶就是这个意思。
05:17
好吧,同学们,这是我们写磁盘的操作啊,咱们先给大家介绍到这里,那好,那你现在的这个sle map task是用来写磁盘,那你得有读磁盘的操作呀,对不对?所以来我们把这个关掉,我们来回过头来,咱们叫DA schedule的打开,打开以后,那么我们这个叫result stage,大家看一下我们打开,那么我们刚才的这个地方,它是不是应该去读我们的文件啊,所以它里面有一个task叫result task叫结果的。任务,那这个结果任务我们可以点一下,它里面应该也有那个叫run task吧,那好,刚才咱们看到了一个write呀,什么writer,你这里有没有那个reader啊,咱们往下看,好像我没看到啊,同学们,我好像没看到,光看到什么,呃,什么thread呀,什么system呀,什么env呀,没看到别的,诶,我看到这个地方,这个叫RDD.er迭代,没有看到那个reader,那这是为什么呢?
06:21
哎,不知道,没关系,我们就看一看这个RDD.e看看他在干什么啊,咱们点,点完以后他说了,如果你的存储级别不等于,那就会走他,那我们现在叫get or compute,顾名思义获取或计算,怎么点,点完以后呢,往下往下当中啊,这边其实会有一个什么东西呢,叫compute or read checkpoint之类的东西啊,咱们点一下,点完以后,那有一个迭代,或者呢,有一个什么呢?Compute,如果你是检查点或者说怎么怎么着,那么这边呢,就会走它,但是我们是要计算,所以点计算compute,这个compute,你会发现它其实是一个抽象方法,那我们讲过了,所有的RDD都一定会有计算的规则,那么回过头来,这是什么RDD。
07:08
这个叫的RDD对不对,所以呀,咱们这里的找一下了,来咱们叫S的啊,咱们叫S的RDD来,哎,就是它那这个三的RDD当中,咱们看看它里面应该有个compute方法吧,咱们找找看看有没有往下走,往下找往下走,诶走到了这个位置,走到这个位置以后,你有没有发现它在干什么,叫get read。然后呢,有个什么呢,叫read reader,用来读取什么我们的数据,它会根据我们当前的一些什么handle,它的一个处理器,然后呢,找到它之前输出的那个文件,然后去读取它就是这个意思,所以呀,有读有写,有写有读,那不就OK了吗?对不对,所以啊,一个写一个毒,整个沙否就穿起来了啊,我们可以大概的看看它的源码之后再去更加深刻的理解它,但最起码现在把一个基本的操作咱们看到了,就是不同的任务它做不同的操作,对不对,好不好,同学们就先这样啊。
我来说两句