00:00
刚才我们把一个分布式的小练习,咱们做了一下啊,就是把咱们的数据啊和咱们的计算逻辑啊,封装成一个task传给了ex,让exor呢来干活,诶这样的话模拟了一个分布式计算,可是呀,咱们这个太简单了,为什么呢?因为咱们现在这个driver啊,它有一个对吧?然后呢,我们的exor呢,它也只有一个,那其实啊,咱们大家想想,那我们其实用单点操作是不是也可以啊,所以这个其实还不能够算真正的分布式的模拟,那如果咱们假设咱们举个例子,同学们看来拷贝我再来一个我们的ex呢?那么就意味着我们的一个driver,它会有什么呢?两个ex来使用,那么也就意味着我的计算的节点有两个了,那同样道理,那我们要想去计算的话,为了提高性能的话,是不是应该把咱们之前的那个task也要分两份啊?再看一下。那就意味着咱们在这个地方呀,咱们要传输一个什么呢?Task。
01:03
好,我们叫做task,那我们要给他传个task,难道我们下面这个地方不传个task吗?是不是也要传呀,同学们也要传啊,就是这样的,所以说那么在分布式节点当中,咱们的这个task这个计算的节点呢,应该是有多个的,可是。你的task里面的数据怎么办呀,现在咱们这边就是1234有四条,那如果这四条的话,大家想想,你给他比方说咱们举个例子也是1234,你下面这个还是1234,那是不是就是有点。重复了咱们的1234,那么这样的话,他们俩就重复了,肯定不能这么做吧?那该怎么办?同学们想一想。诶没错,是不是应该把他们均匀的分配一下,比方说我们的一二诶给这个task,然后呢,我们的三四给这个task,那这样的话呢,每个节点是不是计算的数据量就减少了,那么数据量减少的话,你的计算的性能是不是就可以提高了,对不对?所以这才是分布式真正重要的地方,那好老师,那我这要该怎么改呢?
02:16
那我相信你现在这个task就感觉不是很合适了,为什么?因为你现在给的数据是一个完整的数据集合,而我需要在运行的时候去把它拆分开,对不对?所以啊,咱们举个例子,比方说。我们这边呢,给他来一个什么呢?我们写上叫sub,咱们的task叫子任务行不行,同学们OK,那么我们把这个地方呢,来同学看,我们来拷贝,拷贝以后呢,其实啊,咱们就叫做task了,那这个叫任务可能就不合适了,为什么?因为它是一个完整的数据集合,那这个叫做task,其实感觉并不是很好了,而我这个叫task是比较准确的,为什么?因为我们要把真正的数据要放在这里面传过去吧。所以说我们序列化这是一定要做的,没问题,然后呢,咱们的数据大家想一想,是不是应该变成什么,变成一二吧,对不对,变成一二,哎,那不对了,你要变成一二的话,那你是不是得创建另外一个类才能写三四呀,所以这种感觉就不好了,那我这边应该干嘛呀,给它变一变,比方说给个捺啊,给个下划线。
03:22
然后在这边呢,我们写上一个冒号,然后呢,我们在这里写上,比方说我们的list啊,给个int,诶咱们怎么写,写完以后,诶我们数据咱们一会儿再说,那么大家想想咱们的这个地方是什么,是不是逻辑,逻辑咱们回过头来看一下,你一和二不一样,但是我问你同学们逻辑是否相同。他们俩的逻辑应该是完全相同嘛,对不对?所以啊,我们计算的任务数据可能不一样,但是我们的逻辑是不是应该是相同的,比方说是那个number,它乘以阿尔法,那我们这里是不是也是咱们的number乘以R啊,所以他们两个应该具有相同的逻辑,对吗?所以逻辑相同,那么我觉得放这儿是没有问题的。
04:07
那么你放这儿的话,那么我们相信啊,你逻辑相同的原因是什么?是因为我们的计算是相同的,所以说我们用它也可以,那么好,这个时候同学们看我把这个呢,我们去掉下划线,就是这个地方我们去掉,去掉以后啊,咱们现在看一下这个地方呢,我们应该用VAR好了,数据现在没有,逻辑现在也没有,但是只要你有,应该是相同的逻辑,对不对?然后呢,这个地方是我们的compute,那我是不是应该把它挪过去啊,同学们对不对,OK,放过来,放过来以后我要放到这里了啊,来,放过来。所以啊,咱们真正的计算应该是由它来完成了,诶老师,那它来完成的话,这个task在干嘛呢?这个task是不是就应该给它拆分开,拆分成我们的两个sub task呀,所以说咱们的这个driver这个位置,这个task这么写好像不是很好了吧,应该怎么办?同学们,我应该想办法把这个task的数据和那个计算给它拆开吧,咱们假设现在有两个计算节点的话,那是不是应该我们的有两个吧,一个叫做一,一个叫做二吧,那我现在来。
05:20
我这写上一个它四个九,四个八,那我的ex我再拷贝一个,咱们模仿一下啊,咱们来写上一个二,点击OK,行,那我写上一个二之后记住啊,两个节点,那么它应该是我们的什么?哎,四个八好了,那么我们的这个四个八以后,来首先第一个,那么你第一个的情况下,同学们看一下咱们这里面是不是应该输出对象,但你输出对象的话,这个task是我事先准备好的,但是这是单点操作,现在我们要给它做一个我们分布式的计算操作,你应该想办法把task的数据给它拆分开,对不对,那所以在这里同学看来,我们写上咱们叫做sub task,诶发过来放过来以后,咱们写上叫new,我们的sub,诶咱们的,那你现在这是task,你是sub task的话,大家想想,那我sub task的点它的logic,它的逻辑是不是应该来自于这边,对于我们的task,点我们的logic。
06:20
然后接下来我们的数据应该是什么呀,所以来同学们看,我们写上咱们叫做点,点了以后,它的date是,哎,我们应该想办法给他,那怎么给他呀,这个里面不是有数据嘛,对不对,它里面是有数据的,它里面如果是有数据的情况下,我们把它的数据干嘛呢?给它取过来对不对,取过来以后,然后呢,点儿点了以后,我们是不是可以想办法取它的几个呀,对不对,咱们这就按理说应该是比方说用它的长度是不是应该除以二啊,因为两个节点嘛,应该均分嘛,那均分的话应该用我们的长度,它的数据长度除以我们的,呃,计算节点的数量对不对,但咱们就别那么复杂了,咱们这就固定了,诶取两个,取两个给它的话,那么这个sub task是不是已经有logic和他了,对不对,那这个时候同学们回过头来看。
07:14
我现在兰一这个它对不对,那我全加上一呀,这个位置让大家看着呢,比较舒服一些,我们全给它加上一好了,加上一之后,那么111,然后呢,我们的CLIENT1,诶给它发过来这个sub task放到这边就可以了,然后呢,我们这边同学们看我们给他来我们的拷贝啊来。呃,把这原封不动啊,我们再来拷贝一下,拷贝拷贝以后我放到下面去,这个呢,应该是我们的二了啊,它应该是CLIENT2,然后呢,这个是我们的二对吧,然后呢,R那么好,我们这里呢就来了,嗯,我们的RRR啊还有这个,那我们这个sub task呢,我看看sub task是不应该也复制一遍,来咱们复制一遍啊来嗯。
08:01
那这个呢,我们写上,诶上面是没有的是吧,那这边给他一个一啊,诶给他个一啊好了,那这个take就不行了吧,没关系,咱们有个叫take right还记得吗?我们也给他一个二啊,也给他一个二,这个咱就不要了,不要了以后我们把这个sub task1我们放这里,这样的话是不是就是OK了,你OK了以后,现在就是两个节点了,两个节点的话,那么我们现在就分两个sub task去传就可以了啊好,那我现在回过头来,我们的exec,这个exec啊,其实我们拿到的就不再是task了,应该是那个叫萨诶task,然后呢,把这个拷贝拷贝过来以后,大家会发现别的都不用管它,所以咱们这里写上啊,咱们叫计算节点,我们加上咱们叫四个九,它的计算结果是什么,对不对?好,再回过头来看,这个叫EX2,那么它的这边也是一样的,咱们叫sub task,把这个放过来,放过来以后这个叫。
09:01
计算节点,咱们叫四个八。好了,它的计算结果也都有了,行,那我现在呢,就多了一个节点啊,一个计算节点,我们来简单的做一个测试啊,行,同学们看,那我现在呢,把咱们这个in啊先启动了啊运行这是我们四个八,然后呢,我们来这边我们也启动咱们四个九。好了,我们的两个啊,咱们来,诶我是点错了吗?这边怎么是driver了啊,我点错了,诶不对,怎么没点错啊,现在呢,我们的两个服务器都等待接收数据,那我现在呢,我们的driver就开始来运行,来调度我们的任务,来执行我们的数据的传输,大家看数据已经传输完毕,那么我们的executor在咱们这个里面,Executor呢,它是四个九对吧?那么它是我们一和二,所以它执行的结果应该是二和四吧,然后呢,你在第二个节点当中,是不是把那个我们的三和四发过去了,那么它乘以二是不是应该是我们的六和八呀?诶,这不就叫分布式计算了吗?所以啊,咱们通过这种方式,我们模仿了一下多节点的操作,但是大家会发现,在咱们整个的执行过程当中,我们这有两个我们的数据吧,一个叫sub task,一个叫task。
10:20
其实大家会发现我们这个名称起的不够好吧,为什么?因为你真正传输的应该是他,对不对,但是你这个叫任务就感觉不合适了,所以啊,我们这个可以把它改一下,为什么呢?因为这个里面呢,包含了特定的完整数据,包含了我们的数据的什么计算逻辑,只不过我们需要在分布式计算当中,我们需要把它拆分开,对不对?所以啊,这个其实应该是一个完整的一个组织数据和存储数据的一个东西,我们把它就称之为叫数据结构,它就是一个数据结构,然后呢,在我们在传输的过程当中,把它拆成一个一个的task,所以啊,咱们这个名起的不是很好,但是我相信这个含义大家应该能够明白,对不对?同学们,诶,就是这样,所以啊,我们在我们分布式计算当中,我们应该用类似的处理方式去完成操作,哎,老师,那是不是10BUG当中也要这么做呢?我告诉你不用,因为10BUG当中已经把类似于这样的数。
11:21
结构已经帮你处理好了,它已经装好了,你过来用就行了,那么大家可以看到,在咱们课件当中,RD加器和广播变量就是类似于这样的数据结构,咱们直接拿过来用好不好,同学们。
我来说两句