00:00
好,那上面我们了解完怎么来计算之后,咱们来实际来用一用啊,内存的一些优化方面啊,一个是数据的持久化和序列化,这一块我们做几个对比啊,第一个是我们对于RDD的一个缓存。那我们知道缓存它占用了是不是就是咱们的存储空间呢,对吧,那么RDD的缓存咱们实际看代码来看一下啊。在咱们这个catch包下面有一个r DD catch DEMO,那这一块的代码很简单,咱们就是初始化的一个。Session,然后呢,我们对这张cos pay进行了查询,那么通过咱们准备的数据来看呢,这张表应该是二点。呃,几个G啊,应该有二点多个G啊。然后呢,我们把它转成RDD,然后catch了一下。那我们就来看一看它到底呃内存使用情况是怎么样的,那后面呢,咱们就是用一个for each行动算子来触发它的缓存,对吧?那我们了解我们回顾一下这个持久化的相关概念啊,Catch默认调用的应该是一个persist。
01:15
来这当前是RDD这个类对吧,Catch,然后它调用的是persist,那么其实这个方法就在上面了,它默认用的就是一个。只有内存的一个存储级别,那存储级别这个事儿咱们也一起来回顾一下。咱们直接看源码就行,那我们可以看到它其实有这么多种。那你看除了最后一个是一个对外缓存,对外缓存对吧,后面是对外,那前面这些大概就是内存跟磁盘的组合,你看有一个什么呢?只放在磁盘,还有什么只放在内存。还有一个是内存跟磁盘都放啊,你看这就有三种组合了,那还有一些大家可以看到后面有一个下划线二,这个的意思就是。
02:03
对缓存再拷贝一份,也就是说再复制一份。他的意思就是说呢,比如说你缓有一个G的数据,要缓存序列化之后的,那可能它会保存两份一个G的,那它的作用就是为了数据可靠性啊,就防止说数出现的数据丢失,那么它可以从它的副本,也就是它的份上啊,也可以拿到数据,那这个呢得看了,如果你是缓存在内存里。啊,像比如说下面这个缓存在内存,而且做备份的话,那你这个你得考虑一下你的资源够不够了,对吧?啊,这是一个取舍,那还有一些后缀是带有ser的,这个就是序列化的缩写嘛,也就是说它会结合咱们指定一些序列化啊来处理。好,那简单回顾完啊,我们也知道目前是基于内存的对吧?好,那我们就来实际的看一看,那这边呢,咱们就从文档这边拷贝啊。
03:10
啊,应该是这个啊。那这边大家可以看一下我的提交参数啊,我是基于后端模式啊,为了方便查看啊,提交给雅,然后呢,Driver给一个,Gcu给三个,每个EXCU2盒,那咱们单个excu能给到六个G,那这边你要注意了,如果你要自己玩的话,如果你是自己的虚拟机,你得考虑你内存够不够了,好吧,你得调一调,首先是雅安单个节点有没有大于六个G,其次是雅恩的一个容器上限够不够六个G。啊,这这两个参数你要注意啊呃,另外这个CPU资源是不是至少要六个啊,那我相信大部分应该是都有啊,那其他就没有了,来我们来提交执行看一眼。
04:05
嗯,还有一个事儿,就是我代码这里写了一个死循环,这是因为什么呢?因为咱们的缓存在任务结束的时候是会被清理掉的。所以如果我们要看到缓存的占用情况,我就不希望让程序停止,也就是说你历史服务器是看不到的,所以我们要看运行时的UI,来我们瞅一眼,嗯,我们应该是从雅安来看,对吧,因为是雅恩的模式,那这一块我们刷新一下,好,当前呢,已经跑起来了,那我们。直接来看一看他的UI啊,点这里。进来之后,这个web UI大家应该很熟了,这是看作业情况的,有几个作业,有几个job,那这个是看stage的啊,那如果你想看沙情况也可以来看,分为几个stage在这儿看,那这个是存储相关的啊,这个是一些环境,就是你当前生效的参数是啥。
05:03
啊,还看一眼吧,这个是工作中很常用的。啊有点慢,你像这边有运行时的一些基本版本信息,还有呢,当前生效的一个参数是啥样的啊,有一些是默认啊,还有呢,像哈杜的配置啊,系统的呀啊依赖的内路径啊,这些都可以去看一看啊,啊这个就特别多了,咱就不去看了。嗯,那这个是ex的情况。有点慢啊。这也够慢的,可能电脑要卡死。哎,好了。这是可以看到咱们有这么几个cute对吧,拜占了一个,然后呢,咱们指定了占了三个啊,咱们指定三个嘛,啊好,现在大家可以看到这个storage内存,呃,单个呢是有三个G可用,这个咱们可以简单算一下,对吧,我指定为六个G。
06:09
然后呢,系统的预留内存是不是300兆啊啊,那我们就先忽略它嘛,对吧,才300兆,然后可用内存是不是要乘以一个0.6啊,是不是等于三个G左右啊。乘0.6啊三点多G,然后呢,咱们。其实这个不完全是存储,因为咱们是不是可以动态占用对吧。那我们可以在接下来看这里已经有1.3个G的缓存了啊,这个还没开始刷新一下。那么大家可以看到都开始了,对吧。来,那咱们看一下存储。当前已经缓存了2.5了,然后呢,2.5个G,然后才缓存成功29%,你大概算一下这个乘以一个三倍多吧,大家可以看到如果要缓存的话,是不是得七点多个G啊。
07:07
对吧。因为咱们默认使用的是不是一个什么呢。加好句的话嘛。呃,还有跟你数据大小有关系啊,类型存储的类型有关系,来再刷一下。那大家可以看到这个exeor好像变多了,对吧,那是因为这里有什么有失败的,他把是呃,并且从事完之后呢,把它这个execu也干掉,又起了一个啊。啊,你看这里有两个失败啊,那这个存储呢,你会发现不会再上涨了,其实它已经停了啊,已经停了。我们看一下这个错误的输出。嗯,看一下啊。
08:06
啊,不在这里,这个应该是。看一下fat。哦,这个吧,时间这么久呃。啊,你看这里有个告警啊说。这里什么没有足够的空间?啊,不在这在这上面啊,太字太小了,你看没有足够的空间来缓存对吧,说白了就是咱们刚才也算到可能要七点多个G,咱们目前还是不够用。看,再再看一眼,他已经不会再增长了啊。那呃,咱们的目的也不是为了让它完全跑完,咱们是在不同的方式来做一个对比,这是仅仅使用缓存的情况下,大家可以看到明显的这个数据膨胀还是比较厉害的,而只有两个成功了。
我来说两句