00:00
好,接下来呢,我们说一下这个Mar优化的方法,那这个方法呢,你在说的时候一定要套路啊,显得你这个。的经验比较丰富啊,那看一下六优化方法,主要从六个方面考虑。麦克阶段。Radio阶段IO传输。数据倾斜常见的一些调参数。首先数据从哪来的,对吧?啊,经过了卖部阶段,这外部阶段我们干了什么事啊。然后阶段怎么来做。IO传输上能不能采用这种压缩啊等等。还有数据倾斜,能不能最好的控制它相应的一个分区。还有常见的一些调参数,那这个呢,就属于源码级的一个。往这么几个方面去考虑。分别去讲。首先第一个数据的输入。输入阶段我们能采用哪些手段对这个二进行优化?第一个是得隔壁小价。
01:02
文件,如果这个文件特别小的话,一定要将它进行合并啊。在执行MR任务前将小文件进行合并,大量的小文件会产生大量的map任务。增大慢的任务装载术,那这个用什么手段?一部的。采用泰迪蒙慢了作位输入,解决输入端大量小文件等长景。OK,那下面再来。到了这个map阶段。Map阶段最耗时的其实就是杀啊杀的过程。那么撒过程当中,其中这里面就有一个一写的过程。那么你写的次数越多,那越好使。那可以干什么呢?调整下的参数啊,其实这个呢是。关心缓冲区的大小。100兆。那这个呢,是默认的,到达百分之多少的时候,一写百分。
02:00
80后面这两个参数还给大家去看啊,参数值增大,除发这个溢写内存的上限,减少一写的次数,那增大内存呗,对吧,哎,增大这个百分比。从而减少磁盘的。还有。还有一个呢,就是减少合并的次数。什么叫合并的系数呢?它在一写过程中啊,它可能会产生N多个文件。那他过底的过程中,不是一下把所有的都摸进去。它也是分批次的去的。那你可以调整这个参数,增大墨迹的文件数。对吧,原来一次这五个,那我现在呢可以一点。啊,减少玻璃次数,从而说到M8处理的。那你这个一下子缓存进来。
03:01
在map之后不影响业务逻辑的前提下采用。适用于什么场景?为者,无生用也。这就是卖不起的可以采取的手段。阶段呢,可以合理的设置啊,Map和数。两个都不能设置太少,也不能设置太多之间强调。影响map个数什么?节电对吧,那第个个程呢。呃,太多会导致这是。所以说要要求啊,把它设置的比较合理一些哈。根据你的。呃。硬件资源情况,CPU、内存,后面我们会说哈,这个美观map test。个radio它都有资源的一个上限啊。
04:05
设置map reduce共存。可以,拜访没有结束的时候。调整这个参数,使map运行到一定程度之后,Reduce也开始运行,减少reduce时间。相当于提前参与预算。不等这个麦克走进。就是可以先开启,先把这几个好了啊。然后这个处理完之后,再把这个拷过来。提前参与运行啊。可以这样就行的啊,并不是说必须得等待所有的脉全结束。降下,规避使用reduce。如果说你真的是不需要这个阶段哈,完全可以把它干掉,这样你减少了大量的。三分的过程啊。这个时间的。
05:03
是。合理设置reduce端的buffer。你说设置六端的缓冲区。默认情况下,数据达到一定阀值的时候,八分钟的数据就会写入到什么对吧,传过来的数据先到八分吧N。过的时候再往上写。然后呢,Reduce会从值班中获得所有的数据,也就是说八分和reduce是没有直接关联的。中间多次写示盘、读磁盘的过程。那接入这个弊端呢,就可以通过参数来设置,使得八分钟一部分数据直接送到。啊,相当于是在内存中和值班中啊,这个排好序之后,把内存中的数据直接送过去。从而减少这个磁盘的开销,但是呢,默认的这个值啊。关闭的啊。
06:00
当这个值呢,如果说大于零的时候,就会保留指定比例的内存,读八分钟的数据,直接发给video。相当于有一部分数据是在内存中,预算相对来说快一些啊,但是这样呢,设置reduce需要内存读取数据。也需要内存。计算呢,也需要这个。都需要内存。那么根据业务的这个运营情况。看看是否能撑爆你这个。如果内存不够用的话,那这个呢就不要去看啊,所有这些东西呢,都是一把。双刃剑啊,双刃剑并不是开的越多越好。呃,那第四个阶段呢,是这个IOIO传输啊。采用数据压缩的方式减少网络IO的时间。比如说安装snap,安装拉。
07:00
在企业开发中这两种啊。使用率非常非常高的。几乎你在任何的一个公司里面都能见到这种压缩方式。啊,很简单,安装一下就能使用。配置的话是不是有相的,比如说。现在卖鸡蛋几个参数?啊,那个输出没调输出呢。啊,三个其实配两个也OK是吧,啊所以说。宝宝,记住啊,OK。呃,使用二进制这种格式。说它呢,其实是呃,可以作为一个中间值啊,把它存到这个。存成二这种文件啊。从传输作为另一个帐户的输入啊。处理完之后呢,你可以再进行其他。格式啊,因为就是它这种格式呢,是比较紧凑的。而且呢,可以把一些小文件呢放。一起去。就是I传输这一块,最主要的就是那个压缩哈。两项呢,是数据倾斜问题。
08:04
最新现象啊,数据倾斜呢?是某一个区域数据量远远大于其他数据。页的,比如说双11销售的那。肯定北京的销售额会比这个。辽宁沈阳的销售额。大的。多的多是吧啊。是一个级别的,那这种情况下,如果你还按照这个城市这么去统计。肯定会导致数据一个。然后下午天点确实是。牵着我家,离我家很近的。也是大城市出来的人。那么数据大小的一个倾斜部分记数的大小远远大于平均值。啊,这个其实这两个事儿啊,都是说的就是你这个最终的数据的输出啊。不均匀啊。某一个旅游太生呢比较忙啊,其他的任务呢都比较闲啊。
09:02
啊是这个出发点不同,一个是频率上,一个是大小上。那既然有这个问题怎么解决?出现了数据信息,不要怕啊。有效的解决方案,比如说方案一抽样和范围分区。先可以通过对原始数据进行抽样。得到结果及一分区边界。什么意思啊,说的比较抽象啊,比如说呢,比如说你这里面原来有2亿条的数据。我把你这里面我先拿出来1000万条据。我对这一点发条数据进行一个分析。分析一下,他这里面到底都有。比如说你要是正常去分区的话,按照原来的设计,其中某一个分区,它的数据量超级大。一大仍然有酒。是900万条。
10:00
900万,那怎么办呢?我就会对这900万条啊,根据它数据特点将它打散,比如说。再分成十个问题。就给你加一些这个,呃,随机数。对吧,啊,加一些这些数,或者这个根据这个I的值啊等等给你打散了。那这里呢,一般就好很多了。呃,这种无论是在这个呃,Map当中,后面在have当中,包括后面在当中。都涉及到这个问题。加一些,呃。等等可以解决这个问题啊。那另一个呢,是自定义分区。其实刚才这个呢,是我先拿出一部分数据,因为我要整个运行的话,这个效率非常低,要。那我拿出其中一部分可能。提前一个小时测试完之后,然后。那下面这个自定义分区呢,就是。
11:01
直接我。了解这个事情,这个数据的分布情况,我直接对你进行相应的。比如说这里边儿有一个。如果麦克输出键的单词来源于一本书。那其中这本书呢,是。有一些专业的词汇特别多。那么就可以制定义分区,将这些专业词发给固定的一部分就处理。比如说特定的这个。特别多的这个分区啊。你的数据比较多吗?我就想办法把你打散了。一定是这样的啊,一定是想办法打卡了。根据不同的小类,这里可以分小类嘛,如果小类不行,那我就先取。取个十啊,啊取个。而将其他发给剩余的也就。还有呢,可以采用这个commander呢,就相当于所有的事情在map阶段。
12:02
一些处理。这个呢是采用map造音。尽量避免。这是非常非常好的方式啊,在have里面也是这种方式的,这个效率能提高N多倍。啊,Map收益在map处理减少reduce。那这是减少数据倾斜的方法。再往下最后一个。常用参数的一个设置。呃,资源相关的一些参数啊。就是分多少内存啊,CPU啊啊。以下参数呢,用户自己的MR应用程序中配置就可以生效,比如说。B里面能查到,要想修改的话,是不是就set。看一下第一个阐述memory my memory。
13:03
也就是说maps map阶段的一个内存使用情况。那什么情况呢?一个map可使用的资源上限。认识。一个卖不开,只给你分。那么如果外实际使用的资源超过这个值。只会。对。制杀。而且我告诉你。呃,在企业开发中。1G是一定不够用的。啊,一般都会往上调,调到多少呢?2G到4G。据你的内存使用情况啊,往上调啊。调高的。那就OK了,那调的前提是不是你。这个集群得有这个内存的。没有的话,那一切都扯淡啊这个。
14:00
下面还有一个。的内存。你说一个它默认的使用情况。那很显然,他更不够了。是不是还得往上调啊,啊,他也得往上调啊。那下面呢,这个是迈reduce map阶段的CPU。卖个鸡蛋,有几个在干活?那最多呢?可使用的最多核数默认值是一。一是不是这个并发度是差好多啊,就可以给他再加一些啊。都OK往下。再往下这个是radio阶段CPU的。那还有呢,Reduce啊这个。每个reduce去map阶段读取数据的并行数。刚才稍微提了一嘴,这边是脉吗?这边是。如果说我想要这个。
15:01
外面没有结束,我就要就是拷贝。为什么不影响呢?因为这个reduce它一次是不是可以读取五个。那我这个map如果是100个呢。是不是也得有一段时间去读啊。所以说这个呢,我就可以我。增加你这个读取数一次,让你多读一点,那多读一点是不是伴随着。机器性能得高啊。过来的啊。这下。Reduce。就阶段它是不是有一个合并。数据啊,八分钟数据量达到多少比例时,开始往这个磁盘里写。先他把数据拷贝到内存当中,内存不够了,再一写到磁盘。那多少双不够了呢?指示。这个内存上限的。当然,你可以把它听过吧。
16:02
那再往下呢,是REDUCE3分,INPUT8分啊。什么意思?Buffer占大小,占reduces可用内存的比例。啊,默认的是0.7。那你总内存是多少,你给。入款期办完写也就。给它分多少啊?你说总计内存是4G,那你乘以0.7是不是多一些,那再要调高一点,是不是0.80.9啊。但是这个起码双刃剑吧,我说过。并不是越高越好,因为他还有其他的,呃,这个阶段要占用这个内存啊。Reduce已buff percent。指定多少比例的内存用来存放这个八分钟的数据,默认的是零。默认这块呢,是。慎慎用啊。要慎。就是这个资源的角度有这么几个。那现在还有还有。
17:02
雅安的一些参数。呃,应该在雅安启动之前就配置在服务器的配置。文件中才能生效这个。我说啊。延安这个这个参数给应用程序container分配的最小内存。肯定干啥的吧。每一个这个进程分配这个任务的啊。默认值是102室里面一个G。一定够了啊。调高他的上限。另一个呢,是给应用程序分配的最大内存,刚才是最小,那这是最大。啊,那这个呢,你要想让它再大的话,你还得把它再调高。再往上。这个是每个container申请的最小CPU核数。最小。那最小你给他来个二,他默认是不是就12了。还有呢,每一个肯定申请的最大CPU核数在。
18:00
那如果你CPU里面有一个六四的是吧,那来六四的啊。给分配的最大物理内存。默认这么多。你要是硬件条件可以也可以把。这个呢,主要是看你的服务器。改变相的参数就OK哈。那下边呢,是三盒性能的。优化的关键参数啊。这两呢,其实这个是欢迎广城区大箱100兆才。再一个呢,就是这个多少达到多少的时候一些。当然你可以去调整它啊。行,那下面呢,还有这个容错相关的参数啊。My reduce map times。最大的尝试次数。每个map t最大常数次数,一旦从事参数超过该值,认为map运行失败。味指的是是。
19:00
那你讲。再尝,多尝试几次的话,你可以把它包一点。另一个呢,这个是reduce最极端最大的这个长次数。你这个太子挂了之后。了多少次?的从试运行。如果还没起来,那就认为。呃,还有一个呢,是这个太的超市时间。经常的,他们超时间的是经常需要,这是这个值是。个参数,该参数表达的意思为什么呢?如果一个task在一定时间内没有任何进入。既不会读取新的数据,也没有输出数据。认为该test处于block状态。就是一个卡住了嘛,对吧,卡住不动了。啊,也许。永远会卡住。植物人设置啊,为了防止因为用户永远block住不退出,则强制设置了一个超时事件。
20:02
是你个任务卡在那不动多长时间,我认为你彻彻底挂掉了是吧。默认指的是。600秒对不对,这不毫秒是吗?600秒。那这个时间,如果你的程序对每条输入的数据的处理时间过长。你一定要把它调掉,调大,否则的话,你会经常感觉到突然间。突然间卡死,挂掉了,因为你挂掉,他说把你杀死了。把你就不能运行了。但是你的程序运行时间可能就需要。呃,说了这么多参数啊,我相信大家。记住的。就包括我,我也记不住。但是干什么呢?什么时候用呢?在你开发的时候要拿着这个表去调,而且我可以告诉你,在只要调这些参数,100%用它。100%你要调的。尤其你像这个ma,这个是1G,默认1G。把凤凰网那些老师明确告诉你。
21:01
这个东西。不够用。至少要两到。都要去调啊。所以说呢,在调的时候,你要看一下这个说明知道怎么去调啊,别这个问任何一个参数都不知道啊。哪些东西能改,至少有个大概的印象,你看第一个呢,这个是主要是map内存,内存你要知道。啊,还有什么能调光线缓冲器的大小是不是也是不能调啊?然后还有呢,这个雅安里面这个container一些CPU啊,内存呢,我也是能调的,具体怎么调这个参数名字千万别给我去记下啊。把它记下来。清华内部毕业不像啊。也不一样啊,要学会学习方法,包括下边这个容错参数,就失败次数的一个记录,对吧,看一下手机参数调一下,他做完了。包括这个啊,这个要注意。这个超时时间,发现你这个程序突然间卡了。这个600秒。然后。
22:00
他就再。进程掉,那这时候你要你要有意思。等于什么呢?我要调高这个值。否则的话。我这个特别没用完呢,是真正没运行完系统还在在跑,并不是卡。这就是MAP6的优化方法啊。后面呢,我们再说这个TFS小文件。
我来说两句