00:00
OK,那我们来看一下啊,第一个这个HDFS参数调优啊,HDFS参数调优啊,这里边呢,我们有一个这样的参数啊,叫做呃,在这就这个啊叫做d FS name node.handle.count。啊,这也也提也提到了一个什么handle德ler对吧,咱们在之前讲这好像也有一个handleler对不对,那这个它又是什么用的呢?来看一下这有相应的这个解释说明啊,看一下内node有一个工作线程池啊,其实当时那个函字其实指的也是线程池啊,那线程池那线值当中我们里边有很多线程,那每个线程用来干什么呢?用来处理不同的data note的并发心跳,以及客户端发送的这个语言数据请求。啊,原操作请求啥意思啊,就是我们name notde,你启动之后,所有的data notde是不是要,哎经常跟咱们的data not name notde保持这个心跳啊,对不对,也是所谓心跳,就是不断的发请求呗,啊发请求那除了他我们客户端是不是也给name not的发请求啊,就说我要读一个文件,我要写一个文件,首先得请求原数据对吧?啊所以说会接受各种各样的请求,那这个所谓的线程池里边,放在线程就是用来处理这些请求的。
01:12
啊,那一般情况下,这个线程池里边呢,我会提前诶创建多个线程,那来的请求我直接拿一个线程出去给它进行处理就行了啊,那咱们这配的这个参数呢,指的就是你的线程值当中,你初始化的这个线程的个数是多少,默认是十个,哎,默认十个,那大家想想这个参数咱们调整的这个大概的思路应该是啥呀?是不是肯定是集群规模越大,那我这个参数就应该相相应的越大才对,对不对啊,是这样的啊,因为经过规模越大,那你data note的请求就越多,越多我线程就养越多啊,确实这样的。好,那接下来咱们看一看,那这个参数我到底应该怎么调,诶,我们在那个海杜op的一个权威指南上面呢,是有一个这样的经验公式的,来看一下这个参数一般我们这么去调啊,我们一般调成20倍的啊,然后呢,Log以一为敌,C size就是集群规模的这样的一个对数啊,也就相当于说我们需要去得到一个这样的数法,就是20倍的哎,集群规模的自然对数。
02:16
啊,自然对手啊,这是咱们这个计算公式啊,这个公式现在还应该还能看懂吧,大家想想能看懂这个公式能看懂,那这个呃,趋势应该是什么样的呢。啊,比如说这是我的集群规模啊,那上边呢,是咱们这个这个值,那规模应该是啥样的,大概什么样的,应该是这样的一个趋势吧,对不对,确实是随着集群这个规模的增长,我的这个呃,现城的数确实应该越大,但是你不可能一直无限的增长,对不对,为什么?因为你线程不能太大,对吧?因为我CPU核数我是有上限的,对不对,那你在线程太多了之后呢,那反而啊需要怎么样频繁的让你的CPU去切换线程,那性能反而不好了,那所以说咱们是这样的一个趋势,随着集群规模增长,那我这个实际上这个值增长的却不大,比较缓慢,是这样的啊,它是这样的一个趋势啊,啊,这个能看懂就行啊,那这个怎么算啊啊那用计算器肯定能算对吧,但是咱们这个可能大家没有计算器对不对,而且我们是程序员,怎么能用计算器呢,对吧,咱们得用代码,那这边呢,咱们可以用一个,呃,简单的一个这个Python代码,咱们去求一下这个值,那咱们求来。
03:28
我们可以这个咱们linknus links,咱们是不是自带Python呀,对吧,咱就直接PYPN,那挑完之后我们就进入到了一个Python的一个交互式客户端里边,在这里边呢,我们就可以使用以下代码呢,呃,去计算一下咱们这个值,那首先我们需要在Python当中,咱们先引用一个ma这样的一个包,那这个包干什么用的。那就是用来进行计算的,那引爆的了啊,引爆完之后呢,咱们可以呃用下面这个公式呢,去计算一下咱们这个值,来看一下啊来家解释一下,虽然拍ython没学过,但这个东西也能看懂,首先print干啥?打印对吧?打印什么?打印后边你看啊20位的,然后呢,咱们引用是不是刚才导了一个包啊,包里边呢,有一个方法叫做log啊,这个log它就是什么呀?就是自然对数,它就是以亿为例啊,就是一为例的啊,那假如说现在我们的集群规模是几是八。
04:21
对不,那是不是就应该是20乘以log以E为底八的对数对不对,那直接打印啊回撤,呃,当然呢,你这个东西得给它转成int值,因为咱们调整的是线程数对吧?啊所以强转一下回车,诶你得到的就是41,那假如说我集中规模,我要是那个20呢?啊,我要是20呢,那你就把这个改成20回车,哎,你就是59啊,那比如说我要是这个100呢啊100啊走哎92啊,你会发现这个其实它不长得不会太疯狂对不对,哎,不会太疯狂啊,是这样的啊,那按照它这个调就行了啊好,那这个退出我们需要一个qui啊来一括号,注意这一个退出函数啊,只能这么退回这那就退出来了啊,就是大家诶得记住咱们这个公式啊,这是调整这个合数的啊,调整这个线程数的行,那这个完之后呢,下边再往下走,还有还有一个参数,大家来看一下啊,这什么是雅安的一个参数,呃,其实这个参数咱们之前已经调过了啊呃,现在我们通过一个场景给大家引入这个参数,现在我们看一下这个场景描述。
05:19
啊来我现在总共集群有七台机器,每天集一条数据啊,第一条其实也不是特别多啊,然后边呢,这个数据源,然后后边呢,我什么卡不卡h FS have,这是不是就跟咱们现在规划的这个呃,项目是一样的呀,对不对?数据源啊,先通过采集放到卡布卡放到HS,再导到have,再进行分析,对吧?啊那现在面临一个问题,什么问题呢?来家看一下数据统意统计主要使用have circle,没有数据清斜小文件,已经做了合并处理,而且开启了JM重用了,对不对,这是不是咱们H那个mmr的一个优化的点呀,对吧?Jva重用,然后后边呢,没有IO阻塞,哎,内存呢,使用了不到50%。
06:01
啊也是咱们内存现在还还很充足对吧,但是跑的很慢。诶,那这是怎么回事呢?啊,看似没有任何问题啊,对不对,而且资源也充足,但是跑的很慢,那这怎么问怎么回事呢。那CPU也没问题,有同学可能说是不是CPU不行啊,一核的CPU啊,不是CPU没问题,那为什么很为什么就不行。啊,其实这个出现这种问题,那呃,大多数情况下都是因因为什么呀,都是因为咱们这个参数没有调整。啊,大家看一下这边有一个主要叫什么,就是内存利用率不高啊,那一般是由什么导致的,来看一下来。我们这首先有一个这样的参数啊,这是什么?雅安点node manager,然后resource点,然后这个memory,然后单位是照。啊,这个参数咱们刚才调过了,对吧?这个参数指的是什么?指的是node manager最多提供多少内存给雅安进行调度,这个参数啊,默认值是八个G,哎,默认是八个G啊,也就是如果说你这个部署上之后,你这样不调,你即便你的这个集群资源,这个内存是128G的内存啊,但是只有八个G可以用,别的都空着的,对不对?那所以说这个你要不调,那肯定是不行的啊,在生产话,这个是必须得调的,大家得记住啊,这是这个参数必须得调啊,那一般情况下调完这个就能搞定啊,就能搞定。
07:26
啊,然后再往下呢,我们这儿呢,还有一个参数。啊,这个参数,这个参数是什么呢?是雅安点schedule了点,然后呢,Maximum啊,然后呃,All照比这个指的是什么来着,这个指的是单个任务可申请的最多的内存,或者叫做什么呀,就是单个单个container,一个任务指的就是什么?就是一个task对吧?一个task就是一个map task或者reduce task,他们是不是对应一个container啊,其实指的就是一个container最多申请多少内存?啊,那这个参数呢,呃,默认它最多也是八个G啊,最多也是八个G啊,最多也是八个G啊,那当然了,这个你可以,当然这个有最大是不是也有最小啊,其实它最大最小默认都是八个G,最大都都都是都是八个G,那一般情况下咱们呃这个怎么去调整啊,这个最大的一般八个G,呃其实也够用了,八个G一般也够用啊,那最小一般给他诶得调一下,最小一般不让它八个G,最小咱们调成多少呢?调成一个G啊,或者两个G,或者是0.5,其实都行啊,最小最大最小啊好,那这个参数呃倒还好,其实主要是哪个会影响咱们那个内存利用率啊,主要是这个啊,主要是这个啊,记得一定得调一下啊行,那主要就是这俩参数,那我把视频录一下。
我来说两句