00:00
对于我们导入导出的任务啊,啊,有很多参数可以去调整的啊,进一步的提高我们的导入导出性能,那你怎么发现它的一个性能问题呢?还是依赖于咱们8.1介绍到的一个profile功能啊,那我们把profile打开。那再去执行一个导入导出,那这个时候我们可以去看哪个地方慢了是吧,再针对性的去调,那我们下面先了解一下对应的一些参数配置,像fe这相关的配置啊。第一个呢,是一个系统配置,呃,就是在配置文件去指定的一些,像有一些超时时间,我们可以去调你呃无法提高性能,并且因为超时而失败的时候啊,为了保证任务的成功啊,你可以尝试着去调整超时参数。那默认呢,最大三天,最小一秒。啊,这是默认最大最小的一个导入的超出时间。
01:02
还有一个在等待队列里面的最大个数的默认值应该是多少呢?100。啊,就是说我有些导入任务在执行,后面还有很多导入任务,那他们可能是处于喷顶状态,挂起等待状态,那挂起最多能有几个啊,就由他来决定。那如果超过这个值,你再创建导入任务是会直接报错显示啊,无法提交啊。呃,还有呢,就是。最大的什么呢?负载运行的导入最大个数,也就是说并发啊,执行中的并发。默认呢,也是100。那如果是同步任务,他可能直接就也不会在那阻塞,直接就拒绝,那如果是异步的,它就会加入我们刚才这个参数讲到的什么呢?喷Ding会加入一个pending队列啊,等待队点。这是f fe相关的通用配置,那么在blocker里面,它也有跟f fe相关的一些,比如说一些字节数,最大最小字节数,呃,你看单个be处理的数据量最小值,单个be处理最大值啊,分别是64兆,还有三个G,还有一个并发的控制,默认是十,这些都可以尝试去调,比如说调高并发。
02:18
那如果数据量确实很大,我把最大值也调大一点啊,这都是允许的。就是使用broke方式导入的时候的一些参数啊,那除了broke这个方式是不是还有是的,那这个主要是调一个超时时间,这个前面我们也都提到过了,默认是600秒啊。那在导出的时候,我们用export。呃,有一个检查间隔对吧?啊,默认五秒啊,需要重启,这个要注意啊。那还有一个并发限制啊,就是说我同时在运行中的导出任务能有几个,默认值是五啊,那如果超过,那还有导出任务提交,那可能他们在等待队列一样。
03:07
这个是主要是来影响我们的并发啊,那还有一个呢,也它导出时也有个超时时间,默认应该是两个小时对吧。是以support的方式啊。那这个一样,呃,一个查询计划负责的最大分片数啊,默认是五个嘛,这个前面应该是讲过了。这是fe相关的不同方式,呃,通用参数,还有不同方式导入的一些参数,那be呢,首先还是一个系统参数啊,那这个我们一看是什么。Right。对吧,这个是be上单个table的写入速度限制啊,默认是十兆。我们前面再去,我们去计算的时候,通常会拿它去做一个考量啊,十兆啊,记住啊,单个分片写入限制。是十兆好。呃,另外一个是它的一些刷写的一些参数啊呃,导入数据在be上会先写入一个叫什么table。
04:07
Table你可以理解为它是一个内存缓冲,它并不是直接落盘,那这个内存缓冲达到了它的大小之后才会刷写到磁盘里面,那这个缓冲默认是多大呢?默认是100兆。啊,那如果这个缓冲过小,是不是导致刷写次数过多,每次刷写都会生成一个文件,那这样就变成一个小文件的问题,对吧?那如果这个呃,一般都是看情况要不要去调啊。如果你发现小文件多了,生成很多小文件,你可以考虑把缓冲调大一点,以此呢来减少我们的刷写次数。还有一个关于超时的啊呃,如果你有遇到网络问题,超时问题,可以去调整它。这是一个RPC相关的啊。呃,具体呢,可以去看啊。
05:01
那后面这个呢。一个等待的超时时间,这个是等待超时,你看这个参数指定的write的等待超时时间。如果在这个时间内没有收到任何数据,那么他就怎么样销毁了啊,就超过这个时间没有数据来,那我就销毁。还有几个限制啊,呃,限制呢,当这应该是对be的限制,最大和最小,什么这一个最大。啊,这也是最大啊,那分别是对内存大小还有一个百分比啊,做一个限制,你看限制单个be用于导入的最大内存和内存百分比啊,一个是最大内存一个百分比。呃,那他们的默认值呢?内存大小啊,这个比率是80%,阈值是80%。
06:01
那这个大小呢,默认是100个G啊,那这两个参数80%不是对,上面这个大小取80%啊,这个百分比是对呃,物理内存取一个比例啊,物理内存。那这两个参数各会得出一个结果值,一个值,那他们两个之间谁生效啊,取最小啊取最小。这个是这倒不算什么优化是,呃,导入任务记录的保存时间啊,就是说我这个导入任务执行过了,那这个导入记录我要保存多久啊。那默认呢,它是保存我看一下啊三天啊,这不限制说哪种导入任务都可以啊。那如果是是尊no的啊,相关B配置啊,是尊no的有一个大小限制,默认是十个G。十个G。那如果你现在需要通过stringnode的方式啊,导入一个比如说20个G的数据啊的文件,那是不是肯定会失败,那这个时候你可以啊,把这个最大值调大就可以了。
07:11
其他呢,如果我们呢,呃,要做一个性能分析。我们说了是不是可以用profile对吧?那除此之外别忘了我们还做了什么监控和展示,上面也有一些指标可以去看,那主要看什么东西呢?一个是IO情况,一个CPU情况。一般是这些原因啊。对吧,重点看这两类的参数,呃,其次如果你还要更深入了解,是不是我们前面也提到了一个什么调试工具啊,啊在这里官网是不是有几个工具的安装,还有使用方式,对吧?那前提你要看得懂。那下面呢,呃,我们讲一个以broke的方式导入一个大文件啊,那有有哪些考量。
08:01
那么我们前面的参数也看到,单个导入B最大处理为多少呢?来,我们别忘了来再看一下是不是有一个三个G的。呃,看一下在哪啊。啊,在这里。啊,我们通过broke的方式去导入。那它最大的数据单个be处理最大数据量是三个G。好,再往下看。那如果我们要去调整呢,我们就调整那几个参数呗。把这个三个G调大,前提是什么?我没得选了,那根据两个东西,一个是be的个数,比如说我就部署了三台be,我最多就是三个对吧?那原始文件呢?那比如说我原始文件有20个G,那你除以三台,那每个是不是得负担六个多G的一个数据,那是不是超过这个参数,这个时候你就可以把这个参数怎么样调大就行了。
09:04
只要把这个三调整为大于等于,呃,它分配到的数据量,那就够了。另外呢,我们也可以尝试把超时时间调大,在这种场景下。因为很可能就会超时了,比如说一个100G的文件集群,个数有十个的话。那么。每一个得同步多少呢?那我们怎么来估算第一个呢?单个be处理的数据量?我们是不是可以直接算呢?比如说100个G除以十个,对吧,每个需要除以十。啊,十个G,那这个时候你最慢的导入任务是多少啊,你知道了对吧,这么一除是不是就得到它的需要的最慢的执行时间呢?对吧?这个任务最长会跑多久啊?另外一个它最快能多快完成呢?单个be处理的数据量还是一样,100个G除以十,你算一下啊,是不是十个G,哎,那我们知道单个b broke导入的限制速度限制是不是十兆啊,假设你能打满。
10:10
那你再除以十兆,这个就是你最快完成的时间,那我们设置的超时时间处于最快跟最半时间中间,那就是比较合理的啊。那如果这个超时时间超过四个小时啊,呃,往往这个时候,嗯,你可以选择将超时时间调大没问题,但意义不是很大,因为这个时间确实有点久啊。嗯。超过四小时,你最好还是切分文件的方式啊,拆分任务来做比较合适啊。另外就是可以做好一个数据量的一个评估啊,设置它的一个最大值限制。啊,这边就是一般的一些方式。
我来说两句