首页 > 代码库 > HBase写性能初步测试

HBase写性能初步测试

背景


刚接触HBase,在本机上对线下HBase集群做了初步的写性能测试,下面对测试内容做详细说明。


说明


HBase环境

0.96版本,8台region server,默认配置

 

写数据说明

单column family,两个column qualifier的值为字符串+随机8位正整数,Row Key为两个quailifer值相连后串上随机Long

比如:val1 = dd1977285, val2 =cc6549921, rowkey = rondom.nextLong() + val1 + val2


测试涵盖到的维度

单线程、多线程比较

Rowkey不hash、Rowkey MD5 Hash (hash后每份rowkey等长,分发Region Server时随机性更好)

单Put写(每次Put一次RPC)、批量写(带write buffer的刷写)

批量写情况下write buffer的大小设置

 

测试未涵盖到的维度

WAL是开启的(线上应用不推荐关闭WAL来换取写速度)

备份数没有改(3份)

每台Region Server的RPC handler数目没有设定(本次单机测试中,RPC响应肯定不会是瓶颈)

没有使用压缩(数据量小)

没有比较ColumnQualifier数目增长

关于Region Server更多的系统设置都是默认的(请求数分布、region文件块大小设置及Compaction影响、Split文件数阀值等等)

 

结果


测试结果比较:

 


总结


批量写性能提升不少

线上应用最好是禁用buffer刷写功能的,即每一个Put一次RPC写,不过看到这种情况下写速度慢,考虑到机器、网络环境的差别的话,估计能上1K

启用buffer刷写功能的话,要避免未flush的put记录丢失。(HTable在close的时候最后是会自动flush,我们在写服务节点故障的时候也需要flush一次)

 

Rowkey哈希后性能有小量提升

Rowkey Hash之后对写性能的确有小量提升,但如果要基于rowkey做范围查找的话,rowkey可能不适合hash,具体看业务场景再考虑。

 

单线程每秒上万行写能力

本机上单线程在开启writerbuffer刷写后,每秒写行数轻松上万。多线程下,本机上每个线程最多到每秒7K行的速度,相信考虑到机器、网络环境的差别的话,也能上万。

 

并发写能力乐观

本机没有模拟到多个节点上百线程的并发写场景,不过根据前一点看的话,还是乐观的,而且本次测试的集群级别的设置都是默认的,集群规模也一般,有很多集群级别的优化手段。

 

等项目开发到一定阶段时候,会测试多节点上百线程并发写的场景,且根据对HBase逐步的了解,之后会有更多经验,相关测试报告再详细产出,这份初步的测试就大致先了解下。


全文完 :)