安平行业应用软件在MRS上的调优实践
发表于 2025/09/11
0
作者 | 陈楚昭
一、介绍
本文档提供应用软件在MRS(MapReduce Service)上的调优实践。
二、基础软硬件信息
1、硬件配置
管理/控制节点硬件配置
鲲鹏硬件 | 配置信息 |
---|---|
CPU型号 | 鲲鹏920 5220处理器 |
内存 | 32G*8,内存速率2933MT/s |
网络 | 4*25GE |
硬盘 | 4 * 1TB SATA HDD 2 * 512GB SATA SSD |
数据节点硬件配置
鲲鹏硬件 | 配置信息 |
---|---|
CPU型号 | 鲲鹏920 5220处理器 |
内存 | 32G*8,内存速率2933MT/s |
网络 | 4*25GE |
硬盘 | 12 * 8TB SATA HDD 2 * 512GB SATA SSD |
2、设备组网
管理节点:安装FusionInsight Manager,即MRS集群的管理系统,提供统一的访问入口。FusionInsight Manager对部署在集群中的节点及服务进行集中管理。
控制节点:控制监控数据节点执行存储数据、接收数据、发送进程状态及完成控制节点的公共功能。
数据节点:执行管理节点发出的指示,上报任务状态、存储数据,以及执行数据节点的公共功能。
节点角色 | IP地址 | 说明 |
管理节点 | 10.xx.xx.59 | 主节点 |
10.xx.xx.61 | 备用节点 | |
控制节点 | 10.xx.xx.59 | - |
10.xx.xx.61 | - | |
10.xx.xx.57 | - | |
数据节点 | 10.xx.xx.51 | - |
10.xx.xx.53 | - | |
10.xx.xx.55 | - |
3、软件要求
操作系统
操作系统名称 | 版本 |
---|---|
openEuler | 22.03 SP1 |
应用软件
软件名称 | 版本 |
---|---|
MapReduce Service | 3.2.0 |
Hive | 3.1.0 |
HBase | 2.2.3 |
Elasticsearch | 7.10.2 |
三、性能调优
1、测试场景
- 两电数据(文本文件)标准化处理性能测试
测试项一:不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项二:不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项三:设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项四:设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
- 分光数据(zip包)标准化处理性能测试
测试项一:不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项二:不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项三:设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
测试项四:设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出
预置条件 | 文件大小为20G 缓存过期时间内最少增加行数: 500 单记录集过期时间: 300s 单记录集最大大小: 51200MB 单记录集最多记录条数: 10000 分区数: 3 写入线程数: 5 |
测试步骤 |
|
2、调优实施
- 操作系统调优
优化措施 | 实施方法 | 调优目的 |
禁用透明大页 | echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag | 关闭内存大页,防止内存泄漏,减少卡顿。 |
关闭swap | swapoff -a | Linux的虚拟内存会根据系统负载自动调整,内存页(page)swap到磁盘会影响测试性能。 |
磁盘调度策略优化 | echo mq-deadline > /sys/block/sd$i/queue/scheduler | 文件系统在通过驱动读写磁盘时,不会立即将读写请求发送给驱动,而是延迟执行,这样Linux内核的IO调度器可以将多个读写请求合并为一个请求或者排序(减少机械磁盘的寻址)发送给驱动,提升性能。 |
调整脏页刷新策略 | echo 500 > /proc/sys/vm/dirty_expire_centisecs echo 100 > /proc/sys/vm/dirty_writeback_centisecs | PageCache中需要回写到磁盘的数据为脏数据。在应用程序通知系统保存脏数据时,应用可以选择直接将数据写入磁盘(O_DIRECT),或者先写到PageCache(非O_DIRECT模式)。非O_DIRECT模式,对于缓存在PageCache中的数据的操作,都在内存中进行,减少了对磁盘的操作。 |
调整磁盘文件预读参数 | echo 65472 > /sys/block/sd$i/queue/read_ahead_kb | 文件预取的原理,就是根据局部性原理,在读取数据时,会多读一定量的相邻数据缓存到内存。如果预读的数据是后续会使用的数据,那么系统性能会提升。 |
网卡中断绑核 | systemctl stop irqbalance.service systemctl disable irqbalance.service echo $cpunum > /proc/irq/$irq/smp_affinity_list | 相比使用内核的irqbalance使网卡中断在所有核上进行调度,使用手动绑核将中断固定,能有效提高业务网络收发包的能力。 |
- HDFS组件参数调优
参数 | 实例 | 默认值 | 调优值 | 描述 |
GC_OPTS | Namenode | -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M | -Xms64G -Xmx64G -XX:NewSize=6G -XX:MaxNewSize=6G | Java虚拟机垃圾回收参数。 |
Datanode | -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M | -Xms32G -Xmx32G -XX:NewSize=3G -XX:MaxNewSize=3G | Java虚拟机垃圾回收参数。 | |
dfs.data.socket.size | - | 131072(BYTE) | 524288(BYTE) | Socket缓存区大小。 |
dfs.datanode.max.transfer.threads | - | 8192 | 32768 | DataNode间传输数据的线程的最大数。 |
dfs.journalnode.edit-cache-size.bytes | - | 104857600(BYTE) | 209715200(BYTE) | JournalNode在内存中缓存的edit logs的大小。 |
hdfs.hdfs-site.customized.configs | - | null | 增加Namenode自定义参数:dfs.namenode.replication.considerLoad,值为false | - |
- Elasticsearch组件参数调优
参数 | 实例 | 默认值 | 调优值 | 描述 |
GC_OPTS | EsNodeX | -Xms1g -Xmx1g | -Xms30g -Xmx30g(最大30即可) | 实例启动时的JVM参数值,主要是存储索引数据,对文档进行增删改查、聚合等操作。 |
EsMaster | -Xms1g -Xmx1g | -Xms30g -Xmx30g(最大30即可) | 实例启动时的JVM参数值,负责集群的管理,主要是集群相关的操作。 | |
EsClient | -Xms1g -Xmx1g | -Xms30g -Xmx30g(最大30即可) | 实例启动时的JVM参数值,只处理路由请求、搜索,及分发索引等操作。 |
- HBase组件参数调优
参数 | 实例 | 默认值 | 调优值 | 描述 |
GC_OPTS | HMaster | -server -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M | -31G,(New size= 4gb ,MaxNewSize=4gb,Rregion超过6000需要改 | Java虚拟机垃圾回收参数。 |
RegionServer | -server -Xms6G -Xmx6G -XX:NewSize=1024M -XX:MaxNewSize=1024M | -31G,New size= 4gb ,MaxNewSize=4gb | Java虚拟机垃圾回收参数。 | |
hbase.regionserver.handler.count | RegionServer | 200 | 1000 | 在RegionServer上启动的RPC侦听器实例数。 |
hbase.regionserver.metahandler.count | RegionServer | 200 | 600 | RegionServer中处理优先请求的程序实例的数量。 |
hbase.hregion.memstore.flush.size | RegionServer | 134217728(单位:Byte) | 268435456(单位:Byte) | 若MemStore的大小(单位:Byte)超过指定值,MemStore将被冲洗至磁盘。 |
hbase.regionserver.hlog.blocksize | RegionServer | 134217728(单位:Byte) | 268435456(单位:Byte) | RegionServer中HLog文件的大小限制。 |
hbase.client.write.buffer | - | 2097152(单位:Byte) | 5242880(单位:Byte) | HBase客户端程序向HBase集群写入数据的缓存值。 |
hbase.regionserver.maxlogs | - | 32 | 100 | RegionServer进程运行过程中,仅有一个HLog文件可以被用来提供写数据服务。 |
hbase.hstore.flusher.count | - | 2 | 10 | flush线程数。 |
hbase.regionserver.thread.compaction.small | - | 10 | 30 | 小压缩线程数。 |
hbase.regionserver.hfilecleaner.large.thread.count | - | - | 5 | 大文件清理线程的数量。 |
hbase.regionserver.hfilecleaner.small.thread.count | - | - | 5 | 小文件清理线程的数量。 |
hfile.block.cache.size | - | 0.1 | 0.2->0.35 | 最大heap的百分比。 |
hbase.regionserver.global.memstore.size | - | 0.4 | 0.4->0.3 | 更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。 |
hbase.wal.provider | - | defaultProvider | multiwal | 指定WAL provider类。 |
hbase.rpc.protection | - | privacy | authentication | 安全SASL连接保护。 |
hbase.hfile.hsync | - | TRUE | FALSE | 设置是否启用Hfile耐久性以将数据持久化到磁盘。 |
hbase.wal.hsync | - | TRUE | FALSE | 设置是否启用WAL文件耐久性以将WAL数据持久化到磁盘。 |
- Hive组件参数调优
参数 | 实例 | 默认值 | 调优值 | 描述 |
GC_OPTS | HiveServer | -Xms2G -Xmx4G | -Xms24G -Xmx48G | Java虚拟机垃圾回收参数。 |
MetaStore | -Xms1G -Xmx2G | -Xms16G -Xmx32G | Java虚拟机垃圾回收参数。 | |
maxConnectionsPerPartition | - | 30 | 60 | MetaStore与DBService并行连接的数量,即与数据库的连接在同一时间内并行连接的数量。 |
partitionCount | - | 2 | 4 | MetaStore使用的分区数量。 |
.auditlog.filesize | HiveServer/MetaStore | 20M | 40M | 审计日志文件的最大大小。 |
.auditlog.maxbackupindex | HiveServer/MetaStore | 20 | 40 | 审计日志文件的最大数量。 |
.log.filesize | HiveServer/MetaStore | 20M | 40M | 日志文件的最大大小。 |
.log.maxbackupindex | HiveServer/MetaStore | 20M | 40M | 日志文件的最大数量。 |
hive.exec.reducers.max | - | 999 | 1500 | Hive提交的MR任务中reducer的最大个数。 |
hive.server2.thrift.min.worker.threads | - | 5 | 50 | HiveServer内部线程池,初始化时启动的线程数量。 |
hive.exec.compress.output | - | FALSE | TRUE | 是否对查询的最终输出进行压缩。 |
hive.zookeeper.session.timeout | - | 180000 | 300000 | HiveServer与ZooKeeper建立连接时的超时时间。 |
hive.execution.engine | - | mr | tez | 选择执行引擎,默认添加Tez引擎。 |
3、调优后性能数据
调优后各性能数据达业务要求,具体如下:
输入类型 | 设置条件 | 耗时 | 性能结果 |
两电数据+文本文件 | 不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出 | 3m24s | 100.4M/S |
两电数据+文本文件 | 不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出 | 3m20s | 102.4M/S |
两电数据+文本文件 | 设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出 | 26m11s | 13.0M/S |
两电数据+文本文件 | 设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出 | 31m20s | 10.9M/S |
分光数据+zip文件 | 不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出 | 5m12s | 65.6M/S |
分光数据+zip文件 | 不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出 | 5m9s | 66.3M/S |
分光数据+zip文件 | 设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出 | 1h6m52s | 5.1M/S |
分光数据+zip文件 | 设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出 | 1h8m52s | 5.5M/S |