目前HBase已经运用于淘宝主搜索的全量和增量的数据存储,有效的减低的数据库的压力,增强了业务扩展的能力。Dump系统的特点是要求在短时间内处理大量数据,对延时要求高。在实施这个项目过程中,我们积累了一些优化的实践,抛砖引玉,供大家参考。
环境:Hadoop CDH3U4 + HBase 0.92.1
1、 尽可能用LZO
数据使用LZO,不仅可以节省存储空间尤其是可以提高传输的效率,因为数据是在regionserver端作解压的。通过测试,可以明显提高HBASE从HDFS的读的性能。尽量不用GZ的方式,GZ的方式在bulkload时有线程安全问题。
2、 根据场景调整Block size
由于使用我们非常关注随机读的性能,一条记录的长度较小,通过设置blocksize=8k,可以提高随机读的性能。
3、 在系统空闲的时候,启动major compaction
在实际中,我们发现随着region不停的flush,hfile的增多会影响scan的性能,为了能控制影响,我们设置了hbase.hregion.majorcompaction为一个比较大的时间,通过另外的定时脚本在空闲的时候集中做各表的major compaction。这样可以保证scan的性能是平稳的。
4、 调整balance策略
我们采用了表级别的balance,但是上线后依旧发现有时scan,会抛timeout的异常。通过hmaster的日志,发现当hbase的表多并且当有regionserver挂掉的时候,表级别balance的策略会导致大面积的region移动。后来通过增加阈值控制,每次balance的时候,每张表的region移动的数量不超过整张表region数量的5%。
5、 关注HDFS的问题
当有regionserver挂掉后,有时split log会很慢,会超时导致master不停的重新resubmit split task,最终导致某些scan任务抛timeout异常。原因是datanode的连接数太多,具体原因是https://issues.apache.org/jira/browse/HDFS-3359 通过升级hdfs到HADOOP CDH3U4之后,问题解决。
6、 注重rowkey设计
使用hash值+具体的key,并且设置一个巨大的MAX_FILESIZE。固定每个region的范围,防止做split,防止split带来的隐患。
7、 尽可能的用batch操作
通过使用batch的方式,能提高近10倍的性能,使原本单条记录的随机读从20ms左右降至2ms左右,因为batch的内部是按regionserver来发送数据的,所以每次batch的List<Row>的大小,应设置成regionserver的若干倍。
8、 如果可以的话,减少数据的versions
由于我们业务只需要一个版本,设置version=1,可以有效的控制hfile的大小,从而控制scan的性能。
相关推荐
HBASE性能调优方法1
hbase性能调优.pdf
hbase性能调优[借鉴].pdf
HBase,性能调优,hadoop,主要是HBASE的各种内部参数的设置,以便优化HBASE的性能。
本文主要是从HBase安装配置和应用程序设计与开发的角度,总结几种常用的性能优化方法。
大数据性能调优之HBase的RowKey设计.docx
HBase性能调优方法。因官方BookPerformanceTuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。 因官方...
hbase在淘宝的应用与优化;优化方面全面
真的是实战经验才能得出来的结果,如果你想深入了解hbase的性能,这个真的对你会有很大的帮助
HBase配置项说明及调优建议
主要是hbase设置读写操作后,面对大数据量的处理,需要设置性能调优
HBASE调优 HBASE技术框架与存储模型 v HBASE调优 v 硬件 v 系统参数 v java v 表的设计 v 客户端 v 服务器端
各种大数据资源调优,希望有帮助。
HBase在淘宝的应用和优化,快速领会大数据hadoop
Hbase 性能 优化,Hbase 数据查询 插入参考
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空...
hbase实战 pdf 英文版 清晰原版,非扫描版