hbase优化小结
目录:
1,背景
2,GC
3,hbase cache
4,compaction
5,其他
1,背景
项目组中,hbase主要用来备份mysql数据库中的表。主要通过接入mysql binlog,经storm存储到hbase。由于是实时接入binlog写入,写的压力不是很大,主要是晚上离线计算的时候,需要将hbase中的表同步到HDFS中,这个时候对hbase的读性能以及全表扫描性能要求有些高,以尽量较少数据导入时间。由于之前时间仓促,以及对hbase了解有限等原因,hbase这块问题多多。当前阶段比较突出的问题主要有两个方面:第一,full GC频繁。 第二,尽量提升hbase的读性能,尤其是scan的性能。
2,GC
问题:通过jstat命令发现regionserver进程full GC非常的频繁,甚至发现full GC的次数比young gc的次数还要多。full gc严重导致region server不稳定,经常运行几天后regionserver会死掉。
原因:通过分析gc log以及实时观察,发现主要是读频发的时候,young区的S1,S2会很快到达100%,导致新的对象快速进入old区,此外,old区full gc不能有效快速回收内存,导致old去的内存一直维持在高位(总是高于设定的CMSInitiatingOccupancyFraction),所以导致old gc比young gc还多。
尝试办法:由于young区在hbase读频繁的时候很快被填满,所以很自然的尝试便是增大young区的大小。但是大了以后产生了两个负面效果,一是young gc时间变长了,二是还是不能解决read的时候young区被快速填满的问题。这时意识到,单纯通过GC调参来解决full gc频繁问题的思路行不通了。
mark一下优化后的GC配置:
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx2000m -Xms2000m -Xmn750m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=70"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx16000m -Xms16000m -Xmn7000m -XX:MaxDirectMemorySize=5g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:${HOME}/hdp_data/hbase/rs.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:SurvivorRatio=2 -XX:+PrintTenuringDistribution"
3,hbase cache
hbase中与内存相关的主要是memstore和block cache,memstore主要服务于写,而block cache主要服务与读。有关block cache的详细介绍,可以参看block cache。hbase默认的block cache策略是LRU block cache,这时所有的cache都放在java进程的heap中,所以导致对hbase读的时候heap中的内存快速增长。bucket cache通过将date block缓存到direct buffer管理的堆外内存中,有效解决了这个问题。通常采用一种混合的策略即combined block cache(LRU block cache + bucket cache). LRU block cache主要用来缓存bloom过滤器,索引等。配置如下:
GC参数设置:-XX:MaxDirectMemorySize=5g,设置java进程使用direct memory的最大值。
hbase-site.xml中配置如下:
<!--LRU Cache--> <property> <name>hfile.block.cache.size</name> <value>0.4</value> </property> <!--Bucket cache--> <property> <name>hbase.bucketcache.ioengine</name> <value>offheap</value> </property> <property> <name>hbase.bucketcache.size</name> <value>4196</value> </property>
设置以后,hbase regionsever进程full gc问题圆满解决。
4,hbase compaction
hbase compaction主要是合并memstore flush到磁盘上的HFile文件。主要分minor compaction和major compaction。minor compaction只会合并很少的hfile,这个花费的时间也不是很长。而major compaction会合并指定table的所有的HFile,所以花费的时间也比较长,但是能够显著提高hbase的读性能。考虑到白天hbase集群的负载并不是很高,所以很自然想到就是做手工major compaction。写一个简单的脚本就好了。其实就一行语句:echo "major_compact 'tablename'" | hbase shell,然后通过crontab定时启动就好了。做了major compaction以后region server的block locality明显好转,hbase读的性能提升提升了50%以上,晚上导表时间几乎缩短了一半。
5,其他
其他的方法也尝试了一些,比方说设置hbase.client.scanner.caching参数,以及在每台datenode的机器上都部署region sever以增强data locality,还有增大hbase导表的并发数等,这些有一些效果,但是不是太明显。
总的来说,这次主要是熟悉hbase相关的原理和配置,然后通过设置一些策略和参数来提升hbase的性能,虽然比较简单粗暴,但是以上方法已基本满足当前需求,所以对hbase读性能的优化暂时告一段落。接下来会对hbase的稳定性以及可运维性做一些测试。
hbase优化小结的更多相关文章
- 大数据技术之_11_HBase学习_02_HBase API 操作 + HBase 与 Hive 集成 + HBase 优化
第6章 HBase API 操作6.1 环境准备6.2 HBase API6.2.1 判断表是否存在6.2.2 抽取获取 Configuration.Connection.Admin 对象的方法以及关 ...
- Spark读Hbase优化 --手动划分region提高并行数
一. Hbase的region 我们先简单介绍下Hbase的架构和Hbase的region: 从物理集群的角度看,Hbase集群中,由一个Hmaster管理多个HRegionServer,其中每个HR ...
- HBASE 优化之REGIONSERVER
HBASE 优化之REGIONSERVER 一,概述 本人在使用优化regionserver的过程有些心得,借此随笔的机会,向大家介绍我的心得,有些是网上拿来的有些是自己在使用过程自己的经验,希望对大 ...
- Hbase优化方案
1.预分区设计 真正存储数据的是region要维护一个区间段的rowkey startRow~endRowkey ->手动设置预分区 create 'user_p','info','partit ...
- Oracle性能优化小结
Oracle性能优化小结 原则一.注意where子句中的连接顺序 Oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须卸载其他where条件之前,哪些可以滤掉最大数量记录的 ...
- 移动 web 开发问题和优化小结
1.前言 到目前为止,互联网行业里,手机越来越智能化,移动端占有的比例越来越高,尤其实在电商,新闻,广告,游戏领域.用户要求越来越高,网站功能越来越好,效果越来越炫酷,这就要求我们产品质量越来越高,w ...
- css写作建议和性能优化小结
1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...
- lucene索引文件大小优化小结
http://www.cnblogs.com/LBSer/p/4068864.html 随着业务快速发展,基于lucene的索引文件zip压缩后也接近了GB量级,而保持索引文件大小为一个可以接受的范围 ...
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
随机推荐
- SOJ 2749_The Fewest Coins
[题意]:已知整个交易系统有N (1 ≤ N ≤ 100)种不同的货币,分别价值V1,V2,V3.......VN(1 ≤ Vi ≤ 120),FJ分别有C1,C2,C3.....CN(0 ≤ Ci ...
- POJ1328 Radar Installation 解题报告
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
- 笔记:Javac编译器
Javac编译器是把 *.java 文件转换为 *.class 文件,是一个前端编译器:对应着有一种把字节码转变为机器码的编译器,称为JIT编译器(Just In Time Compiler),比如 ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- how to read openstack code : paste deploy
本篇分为以下几个部分 paste 是什么 怎样使用paste paste of neutron paste 是什么 WSGI 是python 中application 和 web server互通的标 ...
- Office 针式打印机如何插入色带
1 打开盖子,用手按住我按的地方 2 向下翻起 3 翻转完成 4 装入色带(有旋钮的那面朝向自己,装入之后,按箭头方向旋转以拉紧色带,下图圈出来的2是色带导向架) 5 把色带绷直,如下 ...
- NoSQL数据库概览及其与SQL语法的比較
[文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.同一时候也是知名的NoSQL数据库之中的一个.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤 ...
- Android 4.4环境搭建——配置AVD模拟器
AVD(Android Virtual Device)即Android模拟器,它是Android官方提供的一个能够执行Android程序的虚拟机,在执行Android程序之前,首先须要创建AVD模拟器 ...
- Python爬虫(一):基本概念
网络爬虫的定义 网络爬虫(Web Spider.又被称为网页蜘蛛.网络机器人,又称为网页追逐者),是一种依照一定的规则,自己主动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字 ...
- 【C++&爬虫】C++实现网络爬虫&socket初级教程
2019年了,发现以前的很多教程都不能用了. 我自己写的socket发给服务器总是返回301错误——资源永久转移.很多教程都是这样,困扰了我很久. 终于我发现了一篇能用的爬虫代码,参考MSDN以及众多 ...