00:00
刚才我们给大家把SPA streaming呢概念和原理呢稍微的介绍了一下,呃,涉及到一些什么实时离线呀,包括我们的流式数据处理,批量数据处理,这个概念呢,我们希望大家能够搞明白,最后呢,我们总结了一句话,SPA streaming它是准实时V批次的数据处理框架啊,所谓的准实时呢,是它无法达到真正的毫秒级别,就是不算真正的实时,但是呢,它又不能叫做离线,因为离线的数据延迟太高了啊,所以我们称之为叫准时时是吧,它的一般的延迟呢,在秒或分钟为单位,然后呢,还有一个叫V批次,这是什么概念呢?就是说我们没有办法真正的做到来一条就处理一条,这样的话有点浪费资源了,不太合适,对吧?但是呢,你要是批量数据太多了也不合适,为什么呢?延迟会更长,所以呢,我们叫做V批次,那怎么体验V批次呢?说呀,它可以设定我们的时间,设定时间来处理我们的数据,比方说三秒啊,五秒啊,在这段时间内来的。
01:00
数据咱们做处理,这样的话,数据量不会很多,并且呢,我们在处理过程当中呢,数据量呢,我们这也不是一条一条的,那这种情况下延迟就会相对来说短一些,所以18这是这样的一个数据处理框架。然后呢,它这里面呢,可以把很多的数据当做输入源来进行处理,比方说卡夫卡呀呀来这些东西啊,包括那个socket都是可以的啊,然后呢,它可以用Spark的高度抽象语啊,比方说map,就是join window等进行计算,这个地方把它称之为叫语,就类似于咱们那个RDD当中子的感觉是一样的,那就是为了区分开,把这些我们的方法呢称之为叫元语,把我们RDB的方法称之为叫算子,这个大家能够明白就可以了啊,OK,咱们接着往下。然后它这里面呢,会有一个什么呢?就是我们的封装啊,像咱们SPA一样,会把RDD封装成data frame和data set,那么这里呢,会把我们RDD封装成一个叫离散化流的概念,离散化流这个可以理解为就是什么呢?我们叫做不连续的流,所以呢,我们不连续的这个流啊,大家可以看到它表示的就是我们每一段啊,我刚才不说过了吗,每一个时间段会产生一个我们的RDD,这个RDD呢,被封装起来就是一种离散化流的这种感觉啊。
02:15
它会有每个时间区间的概念,这个时间区间该怎么理解呢?这里给大家稍微的把这个图形画一下啊,咱们刚才呢,咱们说过了,咱们的driver和ECU呢,它要去进行我们的处理,这是我们最底层核心的,但是你现在数据在源源不断的过来,所以大家看一下我这里呢,标上一根线啊,咱们标上一根线表示的是数据的一个流向,好,然后呢,用一个虚线,然后呢,我们再来把它放到这里啊,然后呢,我们这边给它稍微的来往下挪一下。好了,把这两根线呢,咱们往上挪啊,咱们往上挪,把它往A。往上挪一下吧,往上挪一下啊,来放在这边,然后呢,我们这边呢,加上咱们的数据,这个数据呢,咱们就随便写就行了啊,咱们写上叫做date,咱们叫做date,来咱们叫做date。
03:04
好了,然后呢,复制一下,复制一下OK过来,然后放过来,好,那我现在呢,把这个往下挪啊,再来往下挪OK,然后继续再把这个date呢往这边挪啊,然后再往这边,我觉得其实也不用太多啊,咱们意思意思得了啊,来把这个去掉了。去掉了以后,这个呢,就是我们数据在源源不断的顺着这个箭头流向过来啊,然后呢,我们这个date呢,再往这边,因为我们还会有数据在源源不断的过来嘛,对吧,所以说体现这种概念就可以了啊,然后把箭头呢,再来,我们的箭头往这边放啊,往这边放OK,然后呢,再来再往这边走,好嘞,往这边放,嗯,这边呢,我们的箭头也是往这边放就可以了。那么接下来我们既然数据在源源不断的过来,那么这个时候我们是要采集数据的,对不对?那么你采集数据我们说了叫做V批次,就说明啊,你不可能一次性处理很多的数据,那么是一个比较小的批量数据,对不对?那这面就有个时间的概念,所谓的时间概念就意味着在这个单位时间内我们能够采集多少的数据,比方说三秒钟,这个三秒呢,就是一个采集周期啊,采集周期,那么我们在三秒钟之内会把对应的数据呢给它来啊,所以我们这里来啊,咱们找一下,比方说这个就是我当前的一个采集周期啊,咱们放过来就可以了。
04:28
来给它置于底层这个颜色给它标示上紫色,这就是一个采集周期,那么随着时间的推移啊,那么下一个采集周期呢,应该就是我们这边啊,就是它了,所以呢,或者把这个删掉吧,把它删掉以后把干嘛呢?挪一下诶,这就是下一个采集周期,对不对?那么这边又有一个采集周期的数据拿过来,同样道理,再来一个,诶,再来一个,然后它又可以再挪动啊,再挪动,这样的话呢,我们不断的去采集我们的数据就行了,那么你采集完成以后,你最终是要把数据发给咱们的driver,形成一个一个的任务来执行,那这个是怎么做到的呢?其实很简单,在我们这里呢,会有一个什么呢?我们的叫采集器。
05:07
咱们有一个数据采集器,这个采集器的功能啊,它就是专门用来做采集数据的,就意味着我们要从这三秒钟,三秒钟把数据采集过来,所以来我们的箭头从这个地方指向咱们的采集器,那如果再过三秒呢,又来采集一下这些数据,诶就是这个意思,那么同样道理,再来,诶把这个呢,放到这边来,放到这边来以后放到这边就可以了啊。那么我们采集器呢,就把数据给它采集到了,采集到了以后,它要做一个封装,这个封装啊,其实就是我们刚才所说的叫离散化流,叫stream,所以把箭头呢给它放过来,放过来以后大家会发现在我们这里呢,就封装成一个咱们称为叫离散化流的内容,咱们称之为叫this stream,然后呢,给它放过来,我们给它一个这个形状吧,嗯。你把这个放过来之后,那接下来呢,就要把它发送给我们的driver,那么里面就包含的对RDD的封装,那么我们的driver就会得到RDD,得到RDD以后再把它形成一个一个的task,再给咱们的来执行,所以底层啊,跟咱们原来没有任何区别,恰恰就是在这一块的过程,采集器呀,咱们的Dis stream啊,这一块跟之前有了变化,他们来采集咱们的数据就是这个意思,所以啊把这个原理呢,大概的跟大家说一下,所以这边就会有一个叫做stream这个概念,它这个呢是由RD所组成的序列,当一个采集周期过来了,那么我们这边就会形成一个stream,里面就会有RDD,然后呢,我们再来一个又会形成一个DD,再来一个又会形成RDD,哎,就这么个意思啊,所以我们的d stream其实就是对RDD它的一种封装,哎,把这个先搞明白好吧。
06:51
然后接下来我们再往下,下面是SPA命的特点啊,什么易用啊,容错呀,包括易整合呀,这个都没什么说的了,然后接着往下,下面呢是SPA命的架构啊,这个架构当中啊,它会有E叫receive,这就是那个数据采集器啊,然后呢,它的采集器呢,会把它传输给我们的driver,这个driver当中啊,会有一个我们的job的一个生成器,生成job,然后呢,最终传递到我们的Spark content当中,其实你会发现这里面呢,就对我们的是RDD的数据呢进行了封装,封装以后呢进行操作,其实这张图呢,可能看的还不是很明确,咱们往下看这张图。
07:30
这张图形当中,大家会发现,其实它里面呢就比较准确了,或者说比较明确了,大家可以看到里面有个叫执行器,叫ex,里面就有个叫接收器,咱们称之为叫receiver是吧接收器,然后呢,它里面有个叫长期运行的任务,为什么呢?因为我们一般情况下,咱们的这种实时数据处理的框架呢,它都是七乘24小时工作的啊,就一直在工作不停啊,所以它是一个长期运行的任务,当它采集完成以后,它会传给driver,用driver呢来进行分解,分解之后再发给我们工作节点来执行他的任务,只不过它的数据源呢,在我们执行器这一边,在我们采集器这一块啊,所以呢,对于我们来讲,这个核心跟以前差不多,只不过数据源发生了改变,对吧,以前的数据源呢,什么文件呢,什么内存呢,现在不是了,是我们的一个什么,诶源源不断的一个实时数据,而这个数据呢,被我们封装好以后,形成了新的数据源,就是这么个概念,好这个呢,我们给大家说一下刚才这个。
08:30
图大家如果能够看明白的话,其实多多少少就能明白它的底层实现原理了啊好,我们接着往下,下面呢有一个叫被压机制,这什么意思呢?说Spark1.5以前版本呢,用户如果要限制receiver的数据接收速率,可以通过静态的配置参数来实现,此举呢可以通过限制接收速率来适配当前的处理能力,防止内存溢出,但是会出现其他的问题啊,什么意思呢?就是说我们这里面就涉及到一个接收数据和一个消费数据的一个速率的问题,如果你的这个接收的太快,但是你的消费太慢,就意味着数据会有积压。
09:10
大家想是不是这样的对吧,你的这个接收的很多,但你数据处理的太慢啊,数据越集越多,越集越多可能就会出现问题,这是第一点,第二点,如果你接收的很慢,但你消费的很快,你会发现你浪费资源。就是你的数据处理完了,你这边还没有接收到呢,对不对,那这样的话呢,就意味着我们的资源被浪费掉了,所以呢,他需要均衡一些啊,需要均衡一些,那这个该如何均衡呢?他说有一套我们叫被压机制,这个被压机制呢,是动态控制数据的接收速率,来适配集群的数据处理能力,就意味着它可以根据我们作业的执行情况来动态调整receiver接收数据的那个数率,动态的不是说我的机器很好,那我就接收的多一些,不是这样的,他要看我的消费的能力怎么样,消费的能力强我就多接受点,消费的能力弱我就少接受一点,诶就是这个概念啊,所以呢,它默认呢会有一些参数来做控制,那么我们说这边有一个,嗯,为force的一个配置参数,它就不启用咱们的这种嗯备压机制啊,但是可以把它给它启动了。
10:15
好了,这个呢,我们先把一些概念呢给大家介绍一下,然后呢,我们再进入它的一个实际的操作过程啊OK。
我来说两句