00:00
好,那再往下呢,是这个雅N的参数的一个调优。那这个参数更重要了,给大家描述一个现象啊,这个题呢是一个京东的一道面试题,也是生产实际环境下你会遇到的一些问题,如果你不调整BB遇到啊,比如说总共有七台机器。每天集一条数据没问题,那后面那个是数据源,然后来采这个数据源,这是啊,这意思哈,然后到后面会发往那个卡夫卡,然后发往as。对吧,咱那个之前那个架构图,你要记住的话,应该就这样采集数据到卡卡,然后到as到have,然后今天有个什么问题呢,现象是这样的,数据统计呢,主要是用这个have circle就是。没有数据倾斜。啊,也说没有这个大量大量的文件进入到一个reduce里面,导致这一个reduce一直运行不完,啊没有这种现象,然后呢,小文件呢,已经做了合理合并处理,因为没有小文件问题,你不需要对ad进行优化。
01:00
而且呢,也开启了就外重用,这是处理小文件的哈,而且IO没有射。但是问题来了,内存用的不到50%。但是还是跑的非常慢,而且数据量呢,这个洪峰过来的时候,整个集群荡掉。让优化啊,以你们目前这个知识,看看能不能搞定他什么原因搞定它导致的。用的hi,没有数据倾斜,没有小文件啊,没有L主摄,但是就是内存用了不到不到50%。可以再具体一点,假如说内存呢,你们是一共是128G内存,它不到50%,只用了这个40的内,呃,40G的内存。假如说啊。不是不是线中那啥了。那是上一个问题了啊。这种现象很奇怪啊,在你们生产环境下,你们就会遇到类似这种情况。嗯。想一想啊,多动脑,多动脑。
02:01
嗯,内存分配的少啊,有点这个意思了哈,你想想这个这里面落款是要内存用了不到50%,那肯定跟内存有关系啊,因为它排除了其他你所有能想象的一些原因,因为其他那些原因会导致你这个机器会荡掉的,对吧?啊会导致断掉的,当然这里面说了,说内存不到50%。嗯,好。问题来了啊,可以,那这个呢,很显然呢,是这个内存利用率不够的一个问题。一般的两个配置造成的啊,有这么两个配置啊,一个呢是单任务可申请的最大内存大小。什么意思?一个任务。他需要总共申请的内存大小多大,这里面是有个默认值,那这个默认值是多少呢。八个G。啊,发卡机。那对应的这个参数啊,这是雅N的啊,这个这个是单个任务的啊,单个任务申请的最大物理内存默认是八个G。
03:01
看一下。最新版的好像是有这个调整啊。这得调调了哈,再回来。最新版的雅安。你看当前是3.2.1啊,咱们正常应该查这个是12.7.2的这个手册。我记得这里面它是有一个参数呢,值呢,是改了一下,进一步优化,咱不耽误看啊,你看一下。哇,这么卡。那我就不在这看了,我在哪看呢?大家如果说这个你找不到这个12.7.2的这个手册,你怎么办呢?官网找不到,我给你找个地儿。你可以从他这个源码里面去找。嗯,比如说找到。资料加包,加包里面,然后找到这个把它解压。啊,这样。
04:02
诶,你们学的时候就应该有啊,直接看这个。开做的时候资料包价包,对这里面我已经给大家提体现出来啊,在这个价包里面你就能找到对应这个文件,然后再DEF。咋看你们讲孩子的时候应该也有哈,然后往上一放。啊,这个参数呢,这是这个the ma,嗯,这个分配的every container,也是每个容器分配的最大内存多大呢?哎,8G对不对,哎,这是八八百一,嗯,8192兆啊8G的内存,这是这么一个值,那你再看另一个值,另一个值呢,是雅安not manager resource这呢是安单节点内存,也是一台服务器的内存,看一下它。看一下,哎,这里面仍然也是8G啊,8G的内存。
05:00
那这两个呢,现在呢,大家脑子里是晕的啊,怎么怎么又蹦出这么两个参数呢?啊,突然间懵了,别懵,我给大家画一下啊,是什么意思。啊,这是一个note manager。Note manager,你可以认为就是还102,假如说还102这里面叫note manager nm,它的默认内存是八个G。比如说这台服务器内存默认是八个G。然后下面这个服务器里面会跑任务。每个任务默认内存。八个G,哎,这是每个任务,那每个任务它是什么概念呢?来看一下这个任务里面。这是一个任务,这个任务里面,比如说这个任务是什么呢?写的是一个MR嘛,是一个word。这个任务是一个word。我看,然后这里面这个任务里还有谁呢?还有这个对应的。
06:03
Radio。三者之间关系要搞清楚。它呢是等于1G内存。Radio。等于1G内存啊,我所说的这个四个参数其实是这样一个关系,那现在呢,就是hi do102这个note单节点默认的内存是八个G,你说你这台服务器默认配的是八个G。即使你这个最外层你配置了是这个128G,对吧,你这个实际的物理内存是128G。那问大家一个问题,你们都配置那个虚拟机,你们的虚拟机上来配置的是50G,那它会一下子把这50G的这个磁盘空间全部占有占有吗?不会对不对,他不会把这个50G成员全部占有,你说你用多少,我是不是这个去拿多少啊,啊是一样的,包括你可以看你自己的虚拟机大小进价,他绝对没有占到50G啊,是你用多少占多少,那同样道理,这里面你配置了我用8G。
07:06
啊用8G,但是他不会一下把8G都占了,但是他最多也就只能用8G,你这个也是,你这个在这个电脑上,你最多是不是只能用50G。啊,你到51G的时候,他就内出了这个溢出了,那同样道理,他的这个父亲就说这个总共这个集群有128G,但是你配置了这个这个节点最大只能用8G。那其他的120G跟一点关系都没有。那就会出现你这块默认的上来机器就是八个G。那你跑任务吧,你跑任务你怎么用,你也是只能用八个G的内存呢。对吧,那就会出现刚才这个这种情况,你看内存用了不到50%,甚至更低。你说你总共就八个G,那我这个集群它这个应该是64的,或者是32的,我觉得啊应该这样。我这边是八个G,我根本就用不到。剩下多余那些跟我没关系啊,是这样的一个道理啊,所以说会出现这种情况,那另一个情况呢,是这个,呃,每一个任务你说一跑一个work count,它这里面包含map test test,它这个默认内存呢,是八个G。
08:10
这也要知道啊,这个呢也是要调整的,跟什么调整,根据你前面的输入的数据量。啊,注意这比如说你看啊,这里面是一个128兆的数据,对应着一个map task,再来一个128兆的数据,对应着一个map,那如果你前面来十个呢。十个128兆,那你这个map task就需要实际的内存,Radio呢,你适当的要增加。对吧,你有一个聚合,那至少也得来一个四到五的一个内存,对吧,那你这就是14G内存,十内存,你总的这个任务呢,才8G。那你要不要调他?他的日程肯定要调,那你要调到14级,嗯,就是这样的一个一个关系啊,那不知道大家这个听没听清楚啊。行,听清楚的同学呢,给我扣个一啊,不太理解的同学呢,给我扣个二。
09:02
这四个参数的一个关系。听清楚楚的同学呢,扣个一,没清楚我的扣个二。好啊,这些参数呢,很重要啊,都是你日后在开发的时候呢,需要这个。一次性多调点这那不行,那浪费资源呢,你当然你要是有资源的话,你可以一次性多调点,这没问题啊,这个东西就是跟你这个居家过日子,是啊,你这里面有一个word comes,当然他有其他其他任务呢,不光有word comes呀。啊,还有什么其他这个呃,数据清洗啊,啊,还有这个自定义不同的呀,还有这个,呃,这个map呢啊有一大堆任务,那这呢是比较合理的,你要动态的去调整,每一个任务你都要去调整,你每跑一个任务都要调。之前你们讲过那个配置参数,那个位置的作用域default是最低的,然后其次是set,再时候呢是代码,你每次提交比如说那个work count,提交这work count的时候,这次word count啊,我要求那个内存是八个G,这都是可以调的,甚至说十个G。
10:07
嗯,对,你们讲那个一定要理解那个配置参数那个哈,就是用那个。你们讲ES第一个案例,不就有那个那个那个例子吗?啊,就是哪一个这个参数优先级最高,在代码里的优先级最高,其次是配置文件,再之后呢,是这个系统的配置文件,对吧?啊就是这几块,这个要搞清楚,所以说一定要理解每一个任务,其实我都是要提交的,提交这些参数了,直接改啊,动态改呀。
我来说两句