00:00
来,那么咱们现在呢,来看一看啊,它的升级版,这个升级版什么的升级版呢,我想做一个封装啊做一个封装,那么封装什么呢?说你看啊,咱们现在在这里边对吧,从这啊从这然后呢,到咱们这个里边对吧,到到到这儿对吧,那么基本上都是在干什么呢?是不是其实主要做的事就是帮咱们创建一个stream啊创建stream,然后同时呢,是不是把咱们outside range给获取到了,对吧?那既然你这可以获取到的话,同学们,那我现在呢,我想把这个代码给抽取一下。给抽取出什么呢?给单独抽取出一个方法啊,给单独抽取出一个我们的方法出来,那我是怎么抽取的呢?我这样抽取的对吧?在咱们这里边我呀,现在主题我定义了,然后这个消费者组的我定义了,接下来我定义钙的方法,都定义钙的方法,这个get的方法呢,把咱们这个啊,String,刚才的对象主题以及消费者组啊给它传过去作为参数,然后这个方法的返回值数呢,这个方法的返回值是一个couple,是个元组,对吧?那么包括两步内容,一个呢是我stream,那么另外一个是我们这个ET range,对,那么具体怎么返回大家看啊,在我概的方法里边,我先从re读取偏移量,然后接着通过偏移量取到卡卡中读取数据,然后接下来咱们现在呢,那要把当前本批次的数据给获取到,然后获取到之后大家想一想这个stream是不是有了,然后咱们现在outside认证是不是也有了,对吧?那么有这。
01:37
之后呢,我可以把它俩封装了一个元组,然后接下来给我们现在的这个方法的返回啊,把这个作业方的回值,对的也说这个方法一执行啊,同学们,那我可以拿到一个元组,这个元组里包含两部内容,一个是stream,那么另外一个就是我们的outside range。对吧,然后接下来我通过咱们这元素,它的第二个元素把outside认呢给拿到啊拖第二元素把这个outside认呢给拿到,然后接下来那么咱现在呢,这个第一元素把那个流给打到,那接下来我现在呢,想去做一个打印输出,对吧?大家觉得这个时候我这oppositeet range对吧,能说出出来吗?
02:18
这个时候咱们现在不是在这了,同学们对吧?那么如果在这的话呢,我先是来一个什么呢?咱们这个outside,直接把这个拿出来就行,对吧,Outside range,然后接下来点sta对吧,做一个输出对吧,现在看一看啊,咱们这里有没有纸,看一下能拿出来,你们觉得能拿出来吗?第一次对O。对吧,大家看这个是不是零啊,到没有值对吧,那我现在呢,我换了啊,不在这了对吧,不在这了,还有哪块啊,这里有它分啊,在这上面打印了对吧?那其实现在干什么呢?我要把这个东西拿过来,对吧,刚才咱们说这个没有呢,但是这种在里边是不是就有了呀?啊因为什么?因为他不也是在咱们这个对这个采集流器里面执行嘛,对吧,来注意看啊同学们,咱们先来运行了,短的运行看一看咱的效果啊吧。
03:20
大家在这儿。换行换行换行对吧,每个材一直给换行换行换行,但是我现在对吧,这个outside range好像没有对,你看这都给他输出东西啊说出东西啊换行换行换行对吧,但是呢,All outside range没有不对呀,同学们这东西你看这这这你你他他们也是在那个什么这个诶A这个在咱们那个什么对吧,这个专业端执行是不是对吧,也是采集中心对要执行一次,每个采集中执一次,那怎么就不行了呢,同学们。在这里和刚才这不一样吗?我只是封装一个方法。
04:04
对吧,那为什么又不行了呢。这是怎么回事啊?这是怎么回事?那这块比刚才呢又要多点东西对吧?那么假如说啊同学们,那么你现在呢,把这块的代码都封装成方法了,对吧?那么如果封装方法的话呢,那咱们现在呢,就可以这样卖,呃,来到这是吧,然后呢,这个是is是吧,然后这块呢是driver,然后接下来在driver这里边呢,我其实又划分了一下,对,再到driver这里边呢,我又划分了下对吧,一个呢是这份代码对吧?啊这个代码啊这个代码再到最后端呢,那一个是啊它对这块内容,然后一个呢是这块代码对吧,这是我set range吧,对,定义变量,注意啊这块是吧,是我这个啊这个接受奥认知,对在这里啊我呢就接受一个变量对吧。
05:16
新建一。这个不用保存对吧,那么咱现在呢,在这里同学们对吧,还是在咱们这个专业网端,然后接下来那么这里呢,有这样一个代码是吧,咱现在声明我的outside range是吧,然后接下来那么咱现在呢,在这里边封装了一个方法对吧?这个方法大家想想我封装方法封装方法这个方法这里是内容,它在哪执行啊。这个方法大概这里边内容像像像咱们这会获取这个数据,这些内容它在好像也是在jar端吧,因为我现在这里不涉及到我这RD的一些算子对吧,大部分这内端它也是在driver端执行的,对吧,就这里边啊这个内容对吧,它大部分的也是在我们的driver端来执行,对吧。
06:06
啊,那咱现在来看一看啊,在这里我现在呢,这里面这些内容它也是在咱们jar端执行啊,这个呢是在JA耳端啊这块呢也是对,这些呢也是对,在咱们这折耳端执行啊在折耳端行对吧?那我现在呢,要把这稍微的去分一下,同学们对吧?那么如果虽然说啊都是在折二端执行,但是呢,那其实也有不太一样的地方对吧?哪块不太一样呢?同学们对吧?那么假如说啊,我现在在执行的时候,对吧?那么这块它是在咱们这driver端哪个线程里面执行的呢。主线程没问题吧,对吧,那这块呢,有一个我们这个主线程对吧,那给它短画一下。对吧?这段代码对吧?那么这段代码呢,它是在哪一个我们这个线程执行的主线程或者主方法里边啊,就方法更好一点是吧?这个呢,是在我们这个主方法里面来执行的啊,这个是在主方法里执行的主方法,然后接下来那么咱们这段代码呢,同学们,这段代码是不是咱们封装的盖的方法执行的对吧?注意啊,这段代码对吧?在哪呢?在我们封装的盖的方法里边对吧?这块在咱们这个封装的get的方法中对吧?它呢在我们get的方法里面来执行啊,盖法来执行对吧?盖的方法对吧?那么我现在呢,注意啊,还有不一样的地方对吧?那么咱们现在那当我重以执行的时候,这段代码执行多少次?同学们,就咱现在主方法里面这个代码,这多少次一次对不对,这一次,那么这个值从哪获取的呢?是不是,其实你看啊,咱们当前这一段代码,它这一次对吧,这个这这个值对吧,从哪获取的,是不是就调咱们这个现在get的方法。
07:53
来得到的呀,对吧,这这就该获取咱们这个先先调到这get的方法得到的嘛,对吧,所以说啊,注意在咱们这里把它俩换一个位置好了,它他在上面get的方法先执行对吧,然后接下来他呢去调到这get的方法,然后得到我现在这个执执行一次,那么执一次我问大家刚开始启动的时候执一次,那么这个时候它给咱们现在这个outside range赋值的变量了吧,这负是不是负值了,负完值之后多少这个是。
08:21
这个TOP2刚开始启动的时候,这一次这个时候有值吗。就你现在啊,刚启动的时候,对吧,把这个代码往下拿,同学们来,呃,咱们正常情况应应该这样的,把这个代码往下拿一下,对吧,往下打一下是吧?来这块代码上往上打,他俩应该这样的顺序,对吧,大家看一看啊,咱们现在在咱这里。能不能稍微水一点点对吧,好对吧,那咱们现在呢,就这么看啊同学们,那咱们现在正常在执行的时候呢,那应该是这样的什么呢?就是我现在这个代码呢,它先执行,因为叫get方法吧,Get方法执行完成之后,它是不是把咱们现在get方法的返回值来复这T,然后它里面第二个元素是不是咱们返回的range呀。
09:12
对吧,那这个时候呢,同学们,那我get的方法执行了对吧,然后这个呢,把执行完的结果复制给我们现在它的一个主观法了,对吧,但是注意同学们这个东西它在我们这个对吧,这个G2端执行,执行一次这个方法调用,同学们,那么咱们也是在启动的时候是不是调一次呀,对吧,但是这个方法里边有些东西啊,它不是执行一次的,虽然说你在专门里调要用你像这些东西对吧,执行一次没问题,那么这块东西呢,执行一次没问题,但是你看咱们get的方法里边是不是有执行多次的呀,对吧,有执行多次的,那么有执行多次的话,同学们,那么咱们现在呢,在我们这里边,那也就说咱们现在是不是每周期我是不是要给它赋一个我们这个值啊,对吧,每周期我要给咱们这o outside认呢,那来赋一个值啊,来负一个值对吧?但是我一开始刚启动的时候,那么这个outside的值是多少,是不是肯定是没有的,这个outside是不是空啊,对吧?那么你现在把空给谁了,是不是给他。
10:12
二两也就意味着我一开始刚启动的时候,它要执行一次,然后咱们这弹的值呢,是多少,是不是我们现在的n uol这个能理解吗?同学们对吧?然后接下来等我现在呀,这个开始周期性执行的时候,大家想一想,那么这块我的代码是不是肯定要每批次执行一次呀,每批次肯定要执一次的,对吧?那既然每批次执一次,那么我问大家这个东西是不是要改,这个东西是不是肯肯定每每周期每批的这一次,那这个值肯定取的新的了,肯定不是空了,是不是得到一个新的值啊,那既然得到新的值,那么现在问题是既然得到新的值了,为什么这个东西不能给它传过来呢?啊,为什么不能给它传回来呢?因为咱们现在这个代码是不是只给它复制了一次呀,对吧,而且注意同学们你还可以怎么来理解,对吧,我现在在这里你在哪定一个变量,你是不是在咱们慢方法定一变量,然后接下来你看一看同学们,咱们现在在叫get的方法的时候,Get的方法这里是不是说明了一个什么呢?对,是不是说明了一个我们这个返位对吧,在咱们就叫做outside range吧,在这里在这里你是不是生了个outside range呀,你在这里是不是也定一个outside range,那我问大家这里有一个outside range,然后这里呢,有一个outside range,它俩在一个,我们现在它这个在这个什么里边吗?在一个方法里边吗?
11:34
不在一个方法里边吧,那么如果不在一个方法里边,大家想一想,咱们现在方法执行它进哪对,本身我现在在这里把按条扎的这个逻辑方法执行是不是要进站的对吧?这里我现在呢,这个谁这个呢应该是我们现在主方法对吧?这个呢应该谁这个应该是我们现在的它的一个get的方法对吧?那么你在主方法里定的变量,你在这里能访问到吧,访问的不是一个吧,对吧,你在这里它俩这两也是两不同的变量呗,对吧?那么也就意味着我每次周期性的执行的时候,我虽然说给我们O塞任值了,但给O任赋值了,但是我负的是谁的,是不是你钙的方法里头这个变量和主方法里这个变量有关系吗?没关系。
12:21
对吧,没关系对吧,所以说呢,对吧,那天同学发现一个问题,说什么呢,有个解决办法,怎么解决的呀,我现在要想去解决对吧,我在这里把它当前outside range这个变量啊,CTRLX,然后接下来往上走,往上走,走到这对CTRV。往这一放,往这一放,我问大家当前这个变量相当于谁,是相当于咱们类变量,类变量意味着什么?不管是我的慢方法,还是我们现在盖的方法,它到时候是不是都访问的是咱们现在应该是堆区里边的这个变量吧,这个堆是不是可以被所有方法所共享,对吧?那你说你不管是周期次执行,这个批执行一次也好,还是批量执行也好,我是不是始终咱们操作都是这一个这个对象,所以说这个时候呢,它是有值的啊,这个时候呢,它是有值的。
13:16
对吧,这时就有知的对吧,注意啊,这块和就是同学们封装的时候咱碰到问题有关系,然后今天呢,咱们同学呢,对吧,在封装的时候又碰到这个问题了,对吧?然后有些同学呢,也问说老师这个这个SPA stream程序执行怎么执行的,对吧?那你想如果要是driver的话,那执行一次,如果A扣的话呢,那其实呢周期性执行,但是driver有一个对一个特例,对吧,像什么咱们transform像说咱RD这个是不是也是每个采集周期去执行一次的呀,对吧,把这块呢这个了解一下啊,就你在封装的时候,如果你要封装,那你把这坑要避开一下啊,你把这坑避一下,这是什么,这是咱们这个分布式项目对吧,他的这个问题对吧,上午看了半天,我就觉得这没啥事了,对吧,因为我我感觉这个执行完这把这方法这个代码直接到封装一个方法一调,对吧,这不行吗?等中午回去我看了一下对吧,诶这个东西他在执行的时候对吧,其实除了什么呀,除了和我们现在。
14:16
对吧,就是driver执行的次数有关系之外,那这里呢,还有一个对吧,还有一个对吧,就是什么呢?就关于我们现在你为什么放在外可以解决对吧,为什么放外边可以决对吧?还有一个咱们方法都可以共享我们这个对这个堆里的数据,把堆里数据好了,这块呢,是给大家扩展的东西,把它停一下。
我来说两句