CDH6.2.1集群线上调优,可做参考
1 CM Service
这些服务主要是提供监控功能,目前的调整主要集中在内存放,以便有足够的资源 完成集群管理。
| 服务 | 选项 | 配置值 |
|---|---|---|
| Activity Monitor | Java Heap Size | 2G |
| Alert Publisher | Java Heap Size | 2G |
| Event Server | Java Heap Size | 2G |
| Host Monitor | Java Heap Size | 4G |
| Service Monitor | Java Heap Size | 4G |
| Reports Manager | Java Heap Size | 2G |
| Navigator Metadata Server | Java Heap Size | 8G |
2.Zookeeper
| 服务 | 选项 | 配置值 |
|---|---|---|
| Zookeeper | Java Heap Size (堆栈大小) | 4G |
| Zookeeper | maxClientCnxns (最大客户端连接数) | 1024 |
| Zookeeper | dataDir (数据文件目录+数据持久化路径) | /hadoop/zookeeper (建议独立目录) |
| Zookeeper | dataLogDir (事务日志目录) | /hadoop/zookeeper_log (建议独立目录) |
3.HDFS
| 服务 | 选项 | 配置值 |
|---|---|---|
| NameNode | Java Heap Size (堆栈大小) | 4G |
| NameNode | dfs.namenode.handler.count | 80 |
| NameNode | dfs.namenode.service.handler.count | 80 |
| NameNode | fs.permissions.umask-mode (使用默认值022) | 27 |
| DataNode | Java Heap Size (堆栈大小) | 4G |
| DataNode | dfs.datanode.balance.bandwidthPerSec (DataNode 平衡带宽) | 100M |
| DataNode | dfs.datanode.handler.count (服务器线程数) | 64 |
| DataNode | dfs.datanode.max.transfer.threads (最大传输线程数) | 20480 |
| JournalNode Java Heap Size (堆栈大小) | 1G |
4.YARN + MapReduce
| 服务 | 选项 | 配置值 | 参数说明 |
|---|---|---|---|
| ResourceManager | Java Heap Size (堆栈大小) | 4G | |
| ResourceManager | yarn.scheduler.minimum-allocation-mb (最小容器内存) | 2G | 给应用程序 Container 分配的最小内存 |
| ResourceManager | yarn.scheduler.increment-allocation-mb (容器内存增量) | 512M | 如果使用 Fair Scheduler,容器内存允许增量 |
| ResourceManager | yarn.scheduler.maximum-allocation-mb (最大容器内存) | 32G | 给应用程序 Container 分配的最大内存 |
| ResourceManager | yarn.scheduler.minimum-allocation-vcores (最小容器虚拟 CPU 内核数量) | 1 | 每个 Container 申请的最小 CPU 核数 |
| ResourceManager | yarn.scheduler.increment-allocation-vcores (容器虚拟 CPU 内核增量) | 1 | 如果使用 Fair Scheduler,虚拟 CPU 内核允许增量 |
| ResourceManager | yarn.scheduler.maximum-allocation-vcores (最大容器虚拟 CPU 内核数量) | 16 | 每个 Container 申请的最大 CPU 核数 |
| ResourceManager | yarn.resourcemanager.recovery.enabled | TRUE | 启用后,ResourceManager 中止时在群集上运行的任何应用程序将在 ResourceManager 下次启动时恢复,备注:如果启用 RM-HA,则始终启用该配置。 |
| NodeManager | Java Heap Size (堆栈大小) | 4G | |
| NodeManager | yarn.nodemanager.resource.memory-mb | 40G | 可分配给容器的物理内存数量,参照资源池内存90%左右 |
| NodeManager | yarn.nodemanager.resource.cpu-vcores | 32 | 可以为容器分配的虚拟 CPU 内核的数量,参照资源池内存90%左右 |
| ApplicationMaster | yarn.app.mapreduce.am.command-opts | 传递到 MapReduce ApplicationMaster 的 Java 命令行参数 "-Djava.net.preferIPv4Stack=true " | |
| ApplicationMaster | yarn.app.mapreduce.am.resource.mb (ApplicationMaster 内存) | 4G | |
| JobHistory | Java Heap Size (堆栈大小) | 2G | |
| MapReduce | mapreduce.map.memory.mb (Map 任务内存) | 4G | 一个MapTask可使用的资源上限。如果MapTask实际使用的资源量超过该值,则会被强制杀死。 |
| MapReduce | mapreduce.reduce.memory.mb (Reduce 任务内存) | 8G | 一个 ReduceTask 可使用的资源上限。如果 ReduceTask 实际使用的资源量超过该值,则会被强制杀死 |
| MapReduce | mapreduce.map.cpu.vcores | 2 | 每个 MapTask 可使用的最多 cpu core 数目 |
| MapReduce | mapreduce.reduce.cpu.vcores | 4 | 每个 ReduceTask 可使用的最多 cpu core 数目 |
| MapReduce | mapreduce.reduce.shuffle.parallelcopies | 20 | 每个 Reduce 去 Map 中取数据的并行数。 |
| MapReduce | mapreduce.task.io.sort.mb(Shuffle 的环形缓冲区大小) | 512M | 当排序文件时要使用的内存缓冲总量。注意:此内存由 JVM 堆栈大小产生(也就是:总用户 JVM 堆栈 - 这些内存 = 总用户可用堆栈空间) |
| MapReduce | mapreduce.map.sort.spill.percent | 80% | 环形缓冲区溢出的阈值 |
| MapReduce | mapreduce.task.timeout | 10分钟 | Task 超时时间,经常需要设置的一个参数,该参数表 达的意思为:如果一个 Task 在一定时间内没有任何进 入,即不会读取新的数据,也没有输出数据,则认为 该 Task 处于 Block 状态,可能是卡住了,也许永远会 卡住,为了防止因为用户程序永远 Block 住不退出, 则强制设置了一个该超时时间。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是 :AttemptID:attempt_12267239451721_123456_m_00 0335_0 Timed out after 600 secsContainer killed by the ApplicationMaster。 |
5 Impala
| 服务 | 选项 | 配置值 | 参数说明 | |
|---|---|---|---|---|
| Impala | Daemon | mem_limit (内存限制) | 50G | 由守护程序本身强制执行的 Impala Daemon 的内存限制。如果达到该限制,Impalad Daemon 上运行的查询可能会被停止 |
| Impala | Daemon | Impala Daemon | JVM Heap | 4G 守护进程堆栈大小 |
| Impala | Daemon | scratch_dirs | 节点上多块独立磁盘(目录) | Impala Daemon 将溢出信息等数据写入磁盘以释放内存所在的目录。这可能是大量数据 |
| Impala | Catalog Server | Java Heap Size | 8G | 堆栈大小 |
6. kafka
| 服务 | 选项 | 配置值 | 参数说明 | |
|---|---|---|---|---|
| Kafka | Broker | Java Heap Size of Broker | 2G | Broker堆栈大小 |
| Kafka | Broker | Data Directories | 多块独立磁盘 | |
| Kafka 服务 | Maximum Message Size | 10M | 服务器可以接收的消息的最大大小。此属性必须与使用者使用的最大提取大小同步。否则,不守规矩的生产者可能会发布太大而无法消费的消息 | |
| Kafka 服务 | Replica Maximum Fetch Size | 20M | 副本发送给leader的获取请求中每个分区要获取的最大字节数。此值应大于message.max.bytes。 | |
| Kafka 服务 | Number of Replica Fetchers | 6 | 用于复制来自领导者的消息的线程数。增大此值将增加跟随者代理中I / O并行度。 |
7. HBase
| 服务 | 选项 | 配置值 | 参数说明 | |
|---|---|---|---|---|
| HBase | Java Heap Size | 16G | 客户端 Java 堆大小(字节)主要作用来缓存Table数据,但是flush时会GC,不要太大,根据集群资源,一般分配整个Hbase集群内存的70%,16->48G就可以了 | |
| HBase | hbase.client.write.buffer | 512M | 写入缓冲区大小,调高该值,可以减少RPC调用次数,单数会消耗更多内存,较大缓冲区需要客户端和服务器中有较大内存,因为服务器将实例化已通过的写入缓冲区并进行处理,这会降低远程过程调用 (RPC) 的数量。 | |
| HBaseMaster | Java Heap Size | 8G | HBase Master 的 Java 堆栈大小 | |
| HBaseMaster | hbase.master.handler.count | 300 | HBase Master 中启动的 RPC 服务器实例数量。 | |
| HBaseRegionServer | Java Heap Size | 30G | HBase RegionServer 的 Java 堆栈大小 | |
| HBaseRegionServer | hbase.regionserver.handler.count | 100 | RegionServer 中启动的 RPC 服务器实例数量,根据集群情况,可以适当增加该值,主要决定是客户端的请求数 | |
| HBaseRegionServer | hbase.regionserver.metahandler.count | 60 | 用于处理 RegionServer 中的优先级请求的处理程序的数量 | |
| HBaseRegionServer | zookeeper.session.timeout | 60000ms | ZooKeeper 会话延迟(以毫秒为单位)。HBase 将此作为建议的最长会话时间传递给 ZooKeeper 仲裁 | |
| HBaseRegionServer | hbase.hregion.memstore.flush.size | 1G | 如 memstore 大小超过此值,Memstore 将刷新到磁盘。通过运行由 hbase.server.thread.wakefrequency 指定的频率的线程检查此值。 | |
| HBaseRegionServer | hbase.hregion.majorcompaction | 0 | 合并周期,在合格节点下,Region下所有的HFile会进行合并,非常消耗资源,在空闲时手动触发 | |
| HBaseRegionServer | hbase.hregion.majorcompaction.jitter | 0 | 抖动比率,根据上面的合并周期,有一个抖动比率,也不靠谱,还是手动好 | |
| HBaseRegionServer | hbase.hstore.compactionThreshold | 6 | 如在任意一个 HStore 中有超过此数量的 HStoreFiles,则将运行压缩以将所有 HStoreFiles 文件作为一个 HStoreFile 重新写入。(每次 memstore 刷新写入一个 HStoreFile)您可通过指定更大数量延长压缩,但压缩将运行更长时间。在压缩期间,更新无法刷新到磁盘。长时间压缩需要足够的内存,以在压缩的持续时间内记录所有更新。如太大,压缩期间客户端会超时。 | |
| HBaseRegionServer | hbase.client.scanner.caching | 1000 | 内存未提供数据的情况下扫描仪下次调用时所提取的行数。较高缓存值需启用较快速度的扫描仪,但这需要更多的内存且当缓存为空时某些下一次调用会运行较长时间 | |
| HBaseRegionServer | hbase.hregion.max.filesize | 50G | HStoreFile 最大大小。如果列组的任意一个 HStoreFile 超过此值,则托管 HRegion 将分割成两个 | |
| HBaseMaster | hbase.master.logcleaner.plugins | 日志清除器插 件 | org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner | |
| HBase | hbase.replication | FALSE | 禁用复制 | |
| HBase | hbase.master.logcleaner.ttl | 10min | 保留 HLogs 的最长时间,加上如上两条解决oldWALs增长问题 |
8. Hive
| 服务 | 选项 | 配置值 | 参数说明 |
|---|---|---|---|
| HiveServer2 | Java Heap Size | 4G | |
| Hive MetaStore | Java Heap Size | 8G | |
| Hive Gateway | Java Heap Size | 2G | |
| Hive | hive.execution.engine | Spark | 执行引擎切换 |
| Hive | hive.fetch.task.conversion | more | Fetch抓取修改为more,可以使全局查找,字段查找,limit查找等都不走计算引擎,而是直接读取表对应储存目录下的文件,大大普通查询速度 |
| Hive | hive.exec.mode.local.auto(hive-site.xml 服务高级配置,客户端高级配置 | ) TRUE | 开启本地模式,在单台机器上处理所有的任务,对于小的数据集,执行时间可以明显被缩短 |
| Hive | hive.exec.mode.local.auto.inputbytes.max(hive-site.xml 服务高级配置,客户端高级配置) | 50000000 | 文件不超过50M |
| Hive | hive.exec.mode.local.auto.input.files.max(hive-site.xml 服务高级配置,客户端高级配置) | 10 | 个数不超过10个 |
| Hive | hive.auto.convert.join | 开启 | 在join问题上,让小表放在左边 去左链接(left join)大表,这样可以有效的减少内存溢出错误发生的几率 |
| Hive | hive.mapjoin.smalltable.filesize(hive-site.xml 服务高级配置,客户端高级配置) | 50000000 | 50M以下认为是小表 |
| Hive | hive.map.aggr 开 | 启 | 默认情况下map阶段同一个key发送给一个reduce,当一个key数据过大时就发生数据倾斜。 |
| Hive | hive.groupby.mapaggr.checkinterval(hive-site.xml 服务高级配置,客户端高级配置) | 200000 | 在map端进行聚合操作的条目数目 |
| Hive | hive.groupby.skewindata(hive-site.xml 服务高级配置,客户端高级配置) | TRUE | 有数据倾斜时进行负载均衡,生成的查询计划会有两个MR Job,第一个MR Job会将key加随机数均匀的分布到Reduce中,做部分聚合操作(预处理),第二个MR Job在根据预处理结果还原原始key,按照Group By Key分布到Reduce中进行聚合运算,完成最终操作 |
| Hive | hive.exec.parallel(hive-site.xml 服务高级配置,客户端高级配置) | TRUE | 开启并行计算 |
| Hive | hive.exec.parallel.thread.number(hive-site.xml 服务高级配置,客户端高级配置) | 16 | 同一个sql允许的最大并行度,针对集群资源适当增加 |
9. Oozie、Hue
| 服务 | 选项 | 配置值参数说明 | |
|---|---|---|---|
| Oozie | Java Heap Size | 1G | 堆栈大小 |
| Hue | Java Heap Size | 4G | 堆栈大小 |