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逐步的了解,之后会有更多经验,相关测试报告再详细产出,这份初步的测试就大致先了解下。

全文完 :)

 

时间: 2024-12-23 12:26:18

HBase写性能初步测试的相关文章

Hadoop参考设计的实现及性能:Hadoop性能初步测试

Name Node/Second Name Node 规格(共两台服务器): DataNode/http://www.aliyun.com/zixun/aggregation/17034.html">TaskTracker 规格: 机柜规格: Hadoop 性能初步测试 基于上述所建立的Hadoop集群,使用标准测试组件进行方案验证,并使用Hadoop性能标杆套件HiBench进行性能测试. nnbench 测试目的:对NameNode的硬件及配置进行负载测试. 参数设置: maps =

HBase最佳实践-写性能优化策略

本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能.和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小达到一定阈值(128M)之后,系统会异步将Memstore中数据flush到HDFS形成小文件. HBase数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去.这两类问题的切入点也不尽相同,如下图所示: 写性能优化切入点 1. 是否需要写WAL?WAL是否需要同步写入? 优化原理

Web服务器性能压力测试工具

Web服务器性能压力测试工具 http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死. 还可以测试HTTPS类的网站请求. 下载地址:http_load-12mar2006.tar.gz 安装很简单 tar zxvf http_load-12mar2006.tar.gz cd http_load-12mar2006 make && m

HBase写数据过程

博文说明:1.研究版本HBase 0.94.12:2.贴出的源代码可能会有删减,只保留关键的代码. 从client和server两个方面探讨HBase的写数据过程. 一.client端 1.写数据API 写数据主要是HTable的单条写和批量写两个API,源码如下: //单条写API public void put(final Put put) throws IOException { doPut(put); if (autoFlush) { flushCommits(); } } //批量写A

Hadoop参考设计的实现及性能:HBase应用性能测试方法

测试工具 YCSB 的安装 YCSB介绍:YCSB(Yahoo! Cloud Serving Benchmark)是Yahoo开源的一款通用的性能测试工具.可以用于测试多种 NoSQL 产品进行测试.相关说明可以参考 https://github.com/brianfrankcooper/YCSB/wiki. YCSB的工作原理如上图所示,主要的模块包括workload和DB Interface: Workload:通过配置文件,定义读写比例,数据的大小等DB Interface:通过接口连接并

线程上下文切换的性能损耗测试

线程上下文切换的性能损耗到底有多少,一直没有直观的理解,今天写个程序测试一下.先看看下面的程序(点击下载): ThreadTester是所有Tester的基类.所有的Tester都干的是同样一件事情,把counter增加到100000000,每次只能加1. 1: public abstract class ThreadTester 2:     { 3:         public const long MAX_COUNTER_NUMBER = 100000000; 4: 5:        

dom4j写xml文件测试

dom4j写xml文件测试:     package com.yanek.demo.xml.test; import java.io.File;import java.io.FileWriter; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter; public class DOM4j {  public static v

数据-hbase RowFilter 性能问题

问题描述 hbase RowFilter 性能问题 hbase表中有一千万数据,id字段建有二级索引,分别用RowFilter和SingleColumnValueFilter去查询单条记录,如: Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("name_id"))); //name_id是一个rowkey的值 Filter filter2

c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过)

问题描述 c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过) 发到贴吧上问了一次,回复较少,所以又来问一遍 代码在贴吧上http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=42728746794&z=2748059140#42728746794<!--