设为首页 加入收藏

TOP

华为HBase调优
2019-02-15 01:41:13 】 浏览:59
Tags:华为 HBase 调优

1.提升Bulkload效率

操作场景

批量加载功能采用了MapReduce jobs直接生成符合HBase内部数据格式的文件,然后把生成的StoreFiles文件加载到正在运行的集群。使用批量加载相比直接使用HBase的API会节约更多的CPU和网络资源。

ImportTSV是一个HBase的表数据加载工具。

前提条件

在执行批量加载时需要通过“Dimporttsv.bulk.output”参数指定文件的输出路径

操作步骤

参数入口:执行批量加载任务时,在BulkLoad命令行中加入如下参数。

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值
-Dimporttsv.mapper.class

用户自定义mapper通过把键值对的构造从mapper移动到reducer以帮助提高性能。mapper只需要把每一行的原始文本发送给reducer,reducer解析每一行的每一条记录并创建键值对。

说明:

当该值配置为“org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper”时,只在执行没有HBASE_CELL_VISIBILITY OR HBASE_CELL_TTL选项的批量加载命令时使用。使用“org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper”时可以得到更好的性能

org.apache.hadoop.hbase.mapreduce.TsvImporterByteMapper

org.apache.hadoop.hbase.mapreduce.TsvImporterTextMappe

不需要调整 不需要调整

2.提升连续put场景(修改为建议值)

操作场景:

对大批量、连续put的场景,配置下面的两个参数为“false”时能大量提升性能。

  • “hbase.regionserver.wal.durable.sync”
  • “hbase.regionserver.hfile.durable.sync”

当提升性能时,缺点是对于DataNode(默认是3个)同时故障时,存在小概率数据丢失的现象。对数据可靠性要求高的场景请慎重配置

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值
hbase.regionserver.wal.durable.sync

每一条wal是否持久化到硬盘

默认true,建议改为false 无,即默认true 无,即默认true
hbase.regionserver.hfile.durable.sync hfile写是否立即持久化到硬盘。 默认true,建议改为false 无,即默认true 无,即默认true

3.Put和Scan性能综合调优

与JVM GC参数有关的参数

RegionServer GC_OPTS参数设置建议:

  • -Xms与-Xmx设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能,可以参考参数“hfile.block.cache.size”(见表12-4)和参数“hbase.regionserver.global.memstore.size”(见表12-3)的介绍进行设置。
  • -XX:NewSize与-XX:MaxNewSize设置相同值,建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”。
  • -XX:CMSInitiatingOccupancyFraction建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过90。
  • -XX:MaxDirectMemorySize表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”。
参数 功能 默认值/建议值 hbase39现有值 hbasea现有值

hfile.block.cache.size

(提升实时读数据效率)

-Xms与-Xmx设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能

数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能

默认值0.25 0.4 0.4
hbase.regionserver.global.memstore.size 建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。 默认值0.4 0.4 0.4
-XX:NewSize与-XX:MaxNewSize设置相同值 建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”。 低负载:512M 高负载:2048M
-XX:CMSInitiatingOccupancyFraction 建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过90 计算值:70
-XX:MaxDirectMemorySize 表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”。 低负载:512M 高负载:2048M

Put相关参数

RegionServer处理put请求的数据,会将数据写入memstore和hlog,

  • 当memstore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,memstore就会刷新到HDFS生成HFile。
  • 当当前region的列簇的HFile数量达到“hbase.hstore.compaction.min”参数值时会触发compaction。
  • 当当前region的列簇HFile数达到“hbase.hstore.blockingStoreFiles”参数值时会阻塞memstore刷新生成HFile的操作,导致put请求阻塞。

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值
hbase.hregion.memstore.flush.size

当memstore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,memstore就会刷新到HDFS生成HFile。

建议设置为HDFS块大小的整数倍,在内存足够put负载大情况下可以调整增大。单位:字节

默认值:134217728字节

=128mb

256mb 128mb
hbase.hstore.compaction.min 当一个Store中文件超过该值时,会进行compact,适当增大该值,可以减少文件被重复执行compaction。但是如果过大,会导致Store中文件数过多而影响读取的性能。 默认值 :6
hbase.hstore.compaction.max 控制一次compaction操作时的文件数量的最大值。与“hbase.hstore.compaction.max.size”的作用基本相同,主要是控制一次compaction操作的时间不要太长 10 空值 10
hbase.hstore.blockingStoreFiles 当列簇的HFile数达到该阈值,阻塞该region的所有操作,直到compcation完成,在put高负载场景下可以适当调大。 默认值:15 10 10
hbase.hstore.flusher.count memstore的flush线程数,在put高负载场景下可以适当调大 2
hbase.regionserver.thread.compaction.small HFile compaction线程数,在put高负载情况下可以适当调大 10

Scan相关参数

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值
hbase.client.scanner.timeout.period 客户端和RegionServer端参数,表示scan租约的时间,建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。 60000ms 60s

Handler相关参数

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值

hbase.regionserver.handler.count

(提升实时读数据效率)

RegionServer上的RPC服务器实例数,建议设置为200 ~ 400之间。 200 30 30
hbase.regionserver.metahandler.count RegionServer中处理优先请求的程序实例的数量,建议设置为200 ~ 400之间。 100 10

4.提升实时写数据效率

写数据服务端调优

参数 功能 默认值/建议值 hbase39现有值 hbasea现有值
hbase.regionserver.thread.compaction.throttle 控制一次Minor Compaction时,进行compaction的文件总大小的阈值。Compaction时的文件总大小会影响这一次compaction的执行时间,如果太大,可能会阻塞其它的compaction或flush操作。 1610612736(单位:字节)
hbase.hregion.majorcompaction

设置Major Compaction的执行周期。默认值为604800000毫秒。由于执行Major Compaction会占用较多的系统资源,如果正在处于系统繁忙时期,会影响系统的性能。

如果业务没有较多的更新、删除、回收过期数据空间时,可以把该值设置为0,以禁止Major Compaction。

如果必须要执行Major Compaction,以回收更多的空间,可以适当增加该值,同时配置参数“hbase.offpeak.end.hour”和“hbase.offpeak.start.hour”以控制Major Compaction发生在业务空闲的时期

604800000(单位:毫秒)

0.7day

0 7day
  • hbase.regionserver.maxlogs
  • hbase.regionserver.hlog.blocksize
  • 表示一个RegionServer上未进行Flush的Hlog的文件数量的阈值,如果大于该值,RegionServer会强制进行flush操作。
  • 表示每个HLog文件的最大大小。如果HLog文件大小大于该值,就会滚动出一个新的HLog文件,旧的将被禁用并归档。

这两个参数共同决定了RegionServer中可以存在的未进行Flush的hlog数量。当这个数据量小于MemStore的总大小的时候,会出现由于HLog文件过多而触发的强制flush操作。这个时候可以适当调整这两个参数的大小,以避免出现这种强制flush的情况。

  • 32
  • 134217728(单位:字节)—128mb

32

5.读/写数据表设计调优

配置参数 描述 默认值
COMPRESSION

配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。

说明:

并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。 常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。

NONE
BLOCKSIZE

配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。

如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。

65536(单位:字节)
IN_MEMORY 配置这个表的数据优先缓存在内存中,这样可以有效提升读取的性能。对于一些小表,而且需要频繁进行读取操作的,可以设置此配置项。 false

6.JVM参数优化

当集群数据量达到一定规模后,JVM的默认配置将无法满足集群的业务需求,轻则集群变慢,重则集群服务不可用。所以需要根据实际的业务情况进行合理的JVM参数配置,提高集群性能

变量名 变量影响的角色 hbase39现有值 hbasea现有值
HBASE_OPTS 该变量中设置的参数,将影响HBase的所有角色

-Xms8g -Xmx8g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:-CMSConcurrentMTEnabled -XX:+CMSIncrementalMode -Djava.net.preferIPv4St

ack=true $HBASE_OPTS

HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:ErrorFile=/app/log/hbase/hs_err_pid%p.log -Djava.io.tmpdir=/tmp"
SERVER_GC_OPTS 该变量中设置的参数,将影响HBase Server端的所有角色,例如:Master、RegionServer等。 SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/app/log/hbase/gc.log-`date +'%Y%m%d%H%M'`"
CLIENT_GC_OPTS 该变量中设置的参数,将影响HBase的Client进程
HBASE_MASTER_OPTS 该变量中设置的参数,将影响HBase的Master

HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx30720m $JDK_DEPENDED_OPTS”

HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS-XX:MaxDirectMemorySize=4096m "

HBASE_REGIONSERVER_OPTS 该变量中设置的参数,将影响HBase的RegionServer

HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmn4096m -XX:CMSInitiatingOccupancyFraction=70-Xms20480m -Xmx20480m $JDK_DEPENDED_OPTS”

HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS-XX:MaxDirectMemorySize=4096m "

HBASE_THRIFT_OPTS 该变量中设置的参数,将影响HBase的Thrift
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用spark将数据写入Hbase 下一篇解决Hbase启动后,hmaster会在几..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目