HDP集群参数调优

前言:本文档适用于新部署的HDP集群,需要修改默认参数值以提高集群的稳定性。


1.Mysql

修改mysql配置文件/etc/my.cnf

参数 说明 默认值 建议值

default-character-set mysql服务器默认字符集设置   utf8

max_connections 最大用户连接数 151 3000

2.Ldap

ldap添加日志方便后期定位问题:

vi slapd.conf

loglevel 4095

vi /etc/rsyslog.conf

local4.* /var/log/openldap.log

service rsyslog restart

service slapd restart

3.Kerberos

参数 说明 默认值 建议值

hadoop.security.auth_to_local  指定的规则将Kerberos主体映射到操作系统用户(系统)帐户   DEFAULT RULE:[2:$1/$2@$0](.*/.*@ocdp)s/(.*)@ocdp/.*/

4.Ambari-server

调整ambari-server堆内存,防止集群增大后,内存不足相应缓慢。

vi /var/lib/ambari-server/ambari-env.sh

export AMBARI_JVM_ARGS=$AMBARI_JVM_ARGS' -Xms1024m -Xmx4096m -XX:MaxPermSize=128m

5.Zookeeper

参数 说明 默认值 建议值

Zookeeper Server Maximum Memory  Zookeeper进程堆内存 1024  4096

6.Hdfs

参数 说明 默认值 建议值

NameNode Java heap size Namenode进程堆内存 1024 51200

Namenode 内存调优

namenode 的元数据对象数包含文件的inodes 和指向datanode 数据块的blocks。

元数据大致分成两个层次:Namespace管理层,负责管理文件系统中的树状目录结构以及文件与数据块的映射关系;块管理层,负责管理文件系统中文件的物理块与实际存储位置的映射关系BlocksMap

dfs.blocksize设置为128M,每个namenode 对象大概150 bytes,大概100W个block 消耗一个1G namenode memory

副本影响dfs的存储空间,但不影响namenode 的内存

eg:

200 hosts of 24 TB each = 4800 TB.Blocksize=128 MB, Replication=3

Cluster capacity in MB: 200 * 24,000,000 MB = 4,800,000,000 MB (4800 TB)

Disk space needed per block: 128 MB per block * 3 = 384 MB storage per block

Cluster capacity in blocks: 4,800,000,000 MB / 384 MB = 12,000,000 blocks

集群大概需要12G 的heap size


生产集群namenode heapsize建议值:20480m~167936m(根据集群数据量大小调整)


其它参数优化:

参数 说明 默认值 建议值

dfs.namenode.handler.count Namenode处理线程数 10 200

dfs.datanode.handler.count Datanode处理线程数 10 160

DataNode maximum Java heap size Datanode进程堆内存 1024 4096

fs.trash.interval Hdfs垃圾回收时间 360 1440

dfs.datanode.balance.bandwidthPerSec Hdfs数据均衡带宽 1048576 10485760

dfs.image.trsansfer.timeout Fsimage传输超时 60000 120000

dfs.image.transfer.bandwidthPerSec Fsimage传输带宽 0 52428800

dfs.datanode.du.reserved Datanode磁盘预留空间 0 157286400

7.Yarn

Yarn进程内存配置:

参数 说明 默认值 建议值

ResourceManager Java heap size Resourcemanager进程堆内存 1024 16384

NodeManager Java heap size Nodemanager进程堆内存 1024 4096

AppTimelineServer Java heap size Timelineserver进程堆内存 1024 4096

Yarn资源配置

根据主机物理配置(32v,128G)进行建议

参数 说明 默认值 建议值

yarn.nodemanager.resource.cpu-vcores Nodemanager节点分配最大并发数(vcore) 8 32

yarn.nodemanager.resource.memory-mb Nodemanager节点分配最大内存数 8192 65536

yarn.scheduler.minimum-allocation-vcores 一个container分配最小vcore数 1 1

yarn.scheduler.maximum-allocation-vcores 一个container分配最大vcore数 32 32

yarn.scheduler.minimum-allocation-mb 一个container分配的最小内存 1024 1024

yarn.scheduler.maximum-allocation-mb 一个container分配的最大内存 8192 65536

8.Mapreduce

参数 说明 默认值 建议值

mapreduce.map.memory.mb Map进程堆内存 1024 2048

mapreduce.map.cpu.vcores Map配置的vcore数 1 1

mapreduce.reduce.memory.mb Reduce进程内存 1024 4096

mapreduce.reduce.cpu.vcores Reduce配置的vcore数 1 1

yarn.app.mapreduce.am.resource.mb MRAPPmaster进程内存 1536 4096

yarn.app.mapreduce.am.resource.cpu-vcores MRAPPmaster配置的vcore数 1 1

9.Hive

参数 说明 默认值 建议值

Client Heap Size Client进程堆内存 1024 1024

Metastore Heap Size Metastore进程堆内存 1024 5120

HiveServer2 Heap Size Hiveserver2进程堆内存 1024 8192

根据现场业务需要进行调整的参数:

参数 说明 默认值 建议值

hive.exec.compress.output Hive开启输出压缩 false true

mapreduce.output.fileoutputformat.compress mapreduce输出压缩 false true

mapreduce.output.fileoutputformat.compress.type mapreduce输出压缩级别 RECORD BLOCK

mapreduce.output.fileoutputformat.compress.codec Mapreduce输出压缩算法 org.apache.hadoop.io.compress.DefaultCodec org.apache.hadoop.io.compress.SnappyCodec

hive.exec.compress.intermediate Hive中间结果压缩 false true

mapreduce.map.output.compress mapreduce中间结果压缩 false true

mapreduce.map.output.compress.codec mapreduce中间结果压缩算法 org.apache.hadoop.io.compress.DefaultCodec org.apache.hadoop.io.compress.SnappyCodec

hive.execution.engine Hive执行引擎 mr tez

hive.exec.parallel Hive job并行执行 false true

hive.mapred.mode Hive是否过滤不合理查询 nonstrict strict

hive.merge.mapredfiles Hive开启文件合并 false true

hive.merge.size.per.task Hive文件合并大小 256000000 256000000

hive.merge.smallfiles.avgsize Hive文件合并大小平均值 16000000 256000000

mapreduce.input.fileinputformat.split.minsize 一个map处理的最小数据量 0 256000000

10.Hbase

参数 说明 默认值 建议值

HBase Master Maximum Memory Hbase master进程堆内存 1024 8192

HBase RegionServer Maximum Memory Hbase regionserver进程堆内存 1024 16384

参数 说明 默认值 建议值

hbase.regionserver.handler.count

Regionserver处理线程数 30 150

hbase.regionserver.global.memstore.upperLimit Hbase memory store内存占regionserver堆内存比例上限 0.2 0.4

hbase.regionserver.global.memstore.lowerLimit Hbase memory store内存占regionserver堆内存比例下限 0.18 0.35

hbase.hregion.memstore.flush.size Hbase Memory store内存数据刷到磁盘阈值 134217728 268435456

hbase.hstore.compactionThreshold

一次minor compaction的最小file数 5 10

hfile.block.cache.size storefile的读缓存占用Heap的大小百分比 0.6 0.4

hbase.hstore.blockingStoreFiles 执行block flush的StoreFiles文件数量阀值 100 150

hbase.hstore.compaction.max 一次minor compaction的最大file数 10 20

hbase.hstore.compaction.min 一次minor compaction的最小file数 3 10

hbase.hregion.memstore.block.multiplier Flush最大的store内存(store个数),超过就block写入。 2 8

hbase.server.thread.wakefrequency Block写的延时时间 10000 100

11.Spark

参数 说明 默认值 建议值

spark_daemon_memory sparkThriftServer进程堆内存 1024 10240

spark.executor.cores 每个executor分配的vcore数 1 5