<大数据架构>根据系统配置调优yarn和对任务数的一些建议
目录:
摘要
对于一个大数据集群性能来说,首先硬件配置要过关,再就是软件配置,使集群能充分使用硬件的性能,从而提高集群的性能。不需要花更多的资金就能更好的提高性能。
默认配置
Yarn配置
首先这个配置是根据硬件内存和cpu来进行调优的,没有固定值只是根据自己的经验进行总结的,也希望能跟大家交流讨论。
nodemanager节点的硬件配置
cpu核数24,内存为128G,132041320KB
内存
那我应该分多少给NodeManager使用呢?
首先我们要知道NodeManager使用内存属性名:
yarn.nodemanager.resource.memory-mb
属性描述: 分配给容器的物理内存大小,单位为MB
默认属性值: 8192MB,即8G
但是128G内存的机器只给yarn 8G内存这样真的好吗?有超过100G的内存都是出于闲置的,我们要尽可能的压榨硬件资源,现在的操作系统这么强大就是因为上世纪末各种操作系统对硬件资源压榨的结果。 我们一般分80%的资源给yarn即可,余下的留给操作系统进行调度和DateNode进行读写和拷贝数据块使用。 按照此次128G内存可以配置100G,这是在除系统基本组件外只有DataNode,NodeManager的情况下,如果有其他组件,可根据其他组件对内存的需求适当的减少,另外不建议在这些计算节点安装其他占用内存的组件。
cpu分配
Manager使用逻辑cpu核数属性名: yarn.nodemanager.resource.cpu-vcores
属性描述: 分配给容器的cpu核数,此核数为逻辑cpu核数
默认属性值: 8
相比内存,系统和DataNode使用cpu所占的百分比就小了,我们可以将yarn可以使用的逻辑cpu核数提高。 我们一般可以给到85%,提高job的计算速度。 按照此次24核cpu可以为给他20个
Contain分配
内存方面
属性名: yarn.scheduler.maximum-allocation-mb
描述: 每个容器获得的最大内存,不会超过分配给容器的总内存,如果超过按着容器最大内存生效。
默认值: 8192
一般我们配置的时候就配置为分配给容器的最大内存即可,为100G。
属性名: yarn.scheduler.minimum-allocation-mb
描述: 每个容器获得的最小内存,内存请求永远不会低于这个值。
默认值: 1024
这个值通过分给容器的内存数除以cpu核数,得到这个值,按照我们的配置为100/20=5G
cpu方面
属性名: yarn.scheduler.maximum-allocation-vcores
描述: 每个容器获得cpu核数的最大值,不会超过分配给容器的总cpu,如果超过按着分配容器cpu核数生效。
默认值: 32
一般我们配置的时候就配置为分配给容器的最大cpu即可,为20。不知道为什么默认值为32。
属性名: yarn.scheduler.minimum-allocation-vcores
描述: 每个容器获得cpu核数的最小值,cpu核数请求永远不会低于这个值。
默认值: 1
这个就使用默认值即可。
根据上述硬件配置,集群的配置
因为有一些其他监控服务,这里我配置了每台机器99G内存,19核cpu,一共10台node节点。
yarn中总内存为990G,核数为190个。
硬件参数一致性
一般NodeManager和DataNode都是在一个节点上存在,我们要求这些节点的硬件参数最好一致,包括DataNode的data.dir所在磁盘的空间最好也一致。 因为所有任务都是并行进行,但是要等所有任务都完成都结束才算job完成,尽可能减少因为一台或者两台服务器慢导致job运行缓慢。
其他配置
你以为内存和cpu充分利用了就可以充分的使用集群性能了吗?
并不是的,网络上都说大数据集群性能主要靠网络,cpu,内存,磁盘读写IO上,其实还有一个重要的参数,那就是缓存,这个缓存在yarn上也有对应配置。
属性名: yarn.nodemanager.local-dirs
描述:用于存储Application中间结果(比如MapReduce中Map Task的中间输出结果)
默认值: ${hadoop.tmp.dir}/nm-local-dir
我们把这个数据可以根据业务需求进行配置。 如果有少量常用结果可以放到内存中,大量结果可以考虑使用一块SSD,一般的都是放在数据盘目录。
关于任务数
一般我们的任务数最好为NodeManager的倍数,一个任务对应一个进程,也就是一个map,这样任务数会尽可能的使每个机器都获得相同的map数,如果不存在数据倾斜的情况看下,使整个job在相同的时间结束,或者完成任务的时间方差较小。
另一方面,我们的最大任务数不要超过190个,但是也不推荐达到190个map数,我们一般达到180即可,这样就充分的使用了cpu和内存。
推荐配置
两块SSD,其他为SATA硬盘存储。 一块SSD做系统盘,另一块做yarn中间结果写入盘,其他SATA盘做数据存储。