鲲鹏社区首页
中文
注册
安平行业应用软件在MRS上的调优实践

安平行业应用软件在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、软件要求

操作系统

操作系统名称版本
openEuler22.03 SP1

应用软件

软件名称版本
MapReduce Service3.2.0
Hive3.1.0
HBase2.2.3
Elasticsearch7.10.2

三、性能调优

1、测试场景

  • 两电数据(文本文件)标准化处理性能测试

测试项一:不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(不设置归一化、关联和比对规则,文件输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项二:不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(不设置归一化、关联和比对规则,kafka输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项三:设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(设置归一化、关联和比对规则,文件输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项四:设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(设置归一化、关联和比对规则,kafka输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

  • 分光数据(zip包)标准化处理性能测试

测试项一:不设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(不设置归一化、关联和比对规则,文件输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项二:不设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(不设置归一化、关联和比对规则,kafka输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项三:设置归一化、关联和比对规则,输出类型为hbase/hive平台文件输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(设置归一化、关联和比对规则,文件输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

测试项四:设置归一化、关联和比对规则,输出类型为hbase/hive平台kafka输出

预置条件

文件大小为20G

缓存过期时间内最少增加行数: 500

单记录集过期时间: 300s

单记录集最大大小: 51200MB

单记录集最多记录条数: 10000

分区数: 3

写入线程数: 5

测试步骤

  1. 设置标准化处理条件(设置归一化、关联和比对规则,kafka输出)

  2. 指定目录下预先放置要标准化处理的数据文件

  3. 启动标准化程序

  4. 统计标准化处理用时

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

本页内容