HBase写入性能调优
本文最后更新于 1345 天前,其中的信息可能已经有所发展或是发生改变。

优化指定客户机群的单台HBase节点的稳定写入速度至不少于9.4MB/s。

(1)关掉HLog

put.setWriteToWAL(false);

(2)加大JVM内存>=90GB

(3)使用mapreduce批量写入(4)调大写缓存,调小读缓存

hbase.regionserver.global.memestore.upperlimit = 0.5
hfile.block.cache.size = 0.3

(5)使用批量写

table.put(puts)

(6)autoflush设置

table.setAutoFlush(false)
 ...
 table.flushCommits();
 或者设置 
 hbase.client.write.buffer

(7)延迟日志flush

hbase.regionserver.optionallogflushinterval
 默认1s,增大改值

(8)增大regionserver handler数量

hbase.regionserver.handler.count=300

HBase服务端调优

GC_OPTS

HBase是利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。GC_OPTS主要需要调整HeapSize和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/9。

当HBase集群规模越大,Region数量越多时,可以适当调大HMaster的GC_OPTS参数

RegionServer需要比HMaster更大的内存,在内存充足的情况下,HeapSize可以相对设置大一些。

HMaster的HeapSize为4G的时候,HBase集群可以支持100000个Region的规模。根据经验值,单个RegionServer的HeapSize不建议超过20GB。

# HMaster、RegionServer GC_OPTS配置如下:
HMaster: -Xms2G -Xmx2G -XX:NewSize=256M -XX:MaxNewSize=256M 
RegionServer: -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M

RegionServer并发请求处理数量

hbase.regionserver.handler.count表示RegionServer在同一时刻能够并发处理多少请求。如果设置过高会导致激烈的线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。应该根据资源情况,适当增加处理线程数。

建议根据CPU的使用情况,可以设置为100至300之间的值。

控制MemStore的大小

hbase.hregion.memstore.flush.size默认值128M,单位字节,一旦有MemStore超过该值将被flush,如果regionserver的jvm内存比较充足(16G以上),可以调整为256M。在内存足够put负载大情况下可以调整增大。

BlockCache优化

BlockCache作为读缓存,合理设置对于提高读性能非常重要。默认情况下,BlockCache和MemStore的配置各占40%,可以根据集群业务进行修正,比如读多写少业务可以将BlockCache占比调大。另外BlockCache的策略也很重要,不同策略对读性能来说影响并不大,但是对GC的影响 却很显著。

HBase缓存区大小,主要影响查询性能。根据查询模式以及查询记录分布情况来决定缓存区的大小。如果采用随机查询使得缓存区的命中率较低,可以适当降低缓存大小。

hfile.block.cache.size,默认0.4,用来提高读性能
hbase.regionserver.global.memstore.size,默认0.4,用来提高写性能

控制HFile个数

MemStore在flush之前,会进行StoreFile的文件数量校验(通过hbase.hstore.blockingStoreFiles参数配置),如果大于设定值,系统将会强制执行Compaction操作进行文件合并,在合并的过程中会阻塞MemStore的数据写入,等待其他线程将StoreFile进行合并。通常情况下发生在数据写入很快的情况下。

hbase.hstore.compactionThreshold表示启动Compaction的最低阈值,该值不能太大,否则会积累太多文件,一般建议设置为5~8左右。

hbase.hstore.blockingStoreFiles默认设置为7,可以适当调大一些。

Split优化

hbase.hregion.max.filesize表示HBase中Region的文件总大小的最大值。当Region中的文件大于该参数时,将会导致Region分裂。

  • 如果该参数设置过小时,可能会导致Split操作频繁
  • 如果该参数设置过大时,会导致Compaction操作需要处理的文件个数增大,影响Compaction执行效率

Compaction优化

hbase.hstore.compaction.min当一个Store中文件超过该值时,会进行Compaction,适当增大该值,可以减少文件被重复执行Compaction。但是如果过大,会导致Store中文件数过多而影响读取的性能。

hbase.hstore.compaction.max控制一次Compaction操作时的文件数据量的最大值。

hbase.hstore.compaction.max.size如果一个HFile文件的大小大于该值,那么在Minor Compaction操作中不会选择这个文件进行Compaction操作,除非进行Major Compaction操作。这个值可以防止较大的HFile参与Compaction操作。在禁止Major Compaction后,一个Store中可能存在几个HFile,而不会合并成为一个HFile,这样不会对数据读取造成太大的性能影响。

原则是:尽量要减小Compaction的次数和Compaction的执行时间

参考:https://zhuanlan.zhihu.com/p/70365703

评论

  1. Windows Firefox 56.0
    3 年前
    2021-9-15 1:40:55

    感谢老师分享

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇