一、前言

在生产环境使用HBase过程中,随着数据量的不断增加,查询HBase数据变得越来越慢,对于业务来说是不可用的,需要对读性能进行优化

二、问题定位

从hbase监控指标来看,发现FullGC次数频繁,大家都知道FullGC对系统的影响很大,会使系统资源都耗在GC上,其它性能就会影响,另一个异常是Compact队列一直在阻塞,需要compact的文件过多又不无法及时得到compact,这个就导致小文件越来越多得不到合并影响读性能。

三、问题解决

初步定位到原因之后,考虑从以下几个方面进行优化

1. 增加regionserver堆栈内存大小,此优化主要考虑到FullGC次数过多,尽量避免Full GC的发生

   2.  观察到集群读缓存率过低,很多时候读的数据都不在缓存中,blockcache得不到利用,所以考虑读写cahce比例调整,减小读增大memstore内存,提高写性能,避免写请求被阻塞

3. 调整small compact线程数,原来是设置了1 个small compact,为提高compact速率,线程调整为3

4. 调整表region数,原来是对于所有的表预分配了1000个region,导致一些数据量小的表region数过多,优化后针对表的数据量调整了region的数量

5. 调整region hfile数量 ,  针对region hfile文件数过多的表,进行手动major_compact, 以提高读性能

6. 隔离表, 此步主要考虑到compact队列阻塞严重,所以考虑将一些表用几台新机器进行隔离, 最本质的其实还是降低单region的hfile数量,降低之后在定位到数据在哪个region之后,可以大幅减少扫描hfile的次数,具体方法如下,

a 确认要隔离的表

b 确认隔离的机器列表

c  创建group

add_rsgroups 'test_tables'

d 将机器列表move到新建组别
move_rsgroup_servers 'test_tables',['1.1.1.1:60020','1.1.1.2:60020','1.1.1.3:60020'] c 查看上面操作是否成功
get_rsgrup 'test_tables' d 将需要隔离的表move到group move_rsgroup_tables 'test_tables',['table1','table2']

进行隔离后,发现compact阻塞严重的表已经下降了,最直观的表现是读性能从原来的10几秒优化到200ms以内,读性能得到质的变化,最主要的优化是降低了每个region的hfile数量,提高了定位数据区间的效率

最新文章

  1. JAVA内部类有关
  2. flex布局示例
  3. 莫名其妙的主机名 VM_32_234_centos
  4. Winbind authentication against active directory
  5. CRT
  6. 用javascript实现完全的类(private、pubulic等)
  7. spring mvc:ueditor跨域多图片上传失败解决方案
  8. #tensorflow入门(1)
  9. Https访问
  10. Day2 《机器学习》第二章学习笔记
  11. Perl构建和打包自己的模块
  12. 【Ansible 文档】【译文】Playbooks 变量
  13. Linux基础第六课——grep|awk|sort|uniq
  14. Windows环境下安装PIL(Python Imaging Library)库
  15. PHP MYSQL 临时表的使用
  16. 天天向上的力量 III(python在pycharm实现)
  17. ubuntu下安装与卸载软件方法
  18. Linux学习笔记<五>——<Shell部分>
  19. perl6 HTTP::UserAgent (3) JSON
  20. Python+Selenium 自动化实现实例-获取页面元素信息(百度首页)

热门文章

  1. C#线程篇---线程池如何管理线程(6完结篇)
  2. bashttpd使用手册
  3. tp5.1 insert 返回id, 不等于符号
  4. CSS--overflow和hover
  5. linux命令总结之lsof命令
  6. 企业级镜像管理系统Harbor
  7. hadoop基础-SequenceFile详解
  8. 新建 Vue项目 使用iView报错解决
  9. Java并发编程原理与实战十:单例问题与线程安全性深入解析
  10. 《设计模式》-原则五:合成/聚合复用原则(CARP)