全栈工程师开发手册 (作者:栾鹏)
架构系列文章
hbase自带的压力测试
示例: 顺序写命令:
hbase org.apache.hadoop.hbase.PerformanceEvaluation --rows=10000 --valueSize=8000 randomWrite 5
说明: 命令行创建5个客户端,并且执行持续的写入测试。每个客户端每次写入8000字节, 每个客户端共写入10000行. 命令行将一直显示完成的进度直到打印最后的结果,当用户确定客户端服务器负载并不大时,可增加一定数量的客户端(也就是说线程或者MapReduce任务)
顺序读:
hbase org.apache.hadoop.hbase.PerformanceEvaluation sequentialRead 1
随机写:
hbase org.apache.hadoop.hbase.PerformanceEvaluation randomWrite 1
随机读:
hbase org.apache.hadoop.hbase.PerformanceEvaluation randomRead 1
参数说明:
hbase pe org.apache.hadoop.hbase.PerformanceEvaluation <OPTIONS> [-D<property=value>]* <command> <nclients>
其中
Options:
nomapred 采用MapReduce的方式启动多线程测试还是通过多线程的方式,如果没有安装MapReduce,或者不想用MapReduce,通常我们采用多线程的方式,因此一般在命令中加上--nomapred来表示不使用MapReduce。
rows 每个客户端(线程)运行的行。默认值:一百万。注意这里的行数是指单线程的行数,如果rows=100, 线程数为10,那么在写测试中,写入HBase的将是 100 x 10 行
size 总大小,单位GiB。与--rows互斥。默认值:1.0。
sampleRate 样本比例:对总行数的一部分样本执行测试。只有randomRead支持。默认值:1.0
traceRate 启用HTrace跨度。每N行启动一次跟踪。默认值:0
table 测试表的名字,如果不设,默认为TestTable。
multiGet 如果> 0,则在执行RandomRead时,执行多次获取而不是单次获取。默认值:0
compress 要使用的压缩类型(GZ,LZO,...)。默认值:'无'
flushCommits 该参数用于确定测试是否应该刷新表。默认值:false
writeToWAL 在puts上设置writeToWAL。默认值:True
autoFlush 默认为false,即PE默认用的是BufferedMutator,BufferedMutator会把数据攒在内存里,达到一定的大小再向服务器发送,如果想明确测单行Put的写入性能,建议设置为true。个人觉得PE中引入autoFlush会影响统计的准确性,因为在没有攒够足够的数据时,put操作会立马返回,根本没产生RPC,但是相应的时间和次数也会被统计在最终结果里。
oneCon 多线程运行测试时,底层使用一个还是多个链接。这个参数默认值为false,每个thread都会启一个Connection,建议把这个参数设为True
presplit 表的预分裂region个数,在做性能测试时一定要设置region个数,不然所有的读写会落在一个region上,严重影响性能
inmemory 试图尽可能保持CF内存的HFile。不保证始终从内存中提供读取。默认值:false
usetags 与KV一起写标签。与HFile V3配合使用。默认值:false
numoftags 指定所需的标签号。仅当usetags为true时才有效。
filterAll 通过不将任何内容返回给客户端,帮助过滤掉服务器端的所有行。通过在内部使用FilterAllFilter,帮助检查服务器端性能。
latency 设置为报告操作延迟。默认值:False
bloomFilter Bloom 过滤器类型,[NONE,ROW,ROWCOL]之一
valueSize 写入HBase的value的size,单位是Byte,大家可以根据自己实际的场景设置这个Value的大小。默认值:1024
valueRandom 设置是否应该在0和'valueSize'之间改变值大小;设置读取大小的统计信息:默认值: Not set.
valueZipf 设置是否应该以zipf格式改变0和'valueSize'之间的值大小, 默认值: Not set.
period 报告每个'period'行:默认值:opts.perClientRunRows / 10
multiGet 批处理组合成N组。只有randomRead支持。默认值: disabled
replicas 启用区域副本测试。默认值:1。
splitPolicy 为表指定自定义RegionSplitPolicy。
randomSleep 在每次获得0和输入值之前进行随机睡眠。默认值:0
Note: -D properties will be applied to the conf used.
For example:
-Dmapreduce.output.fileoutputformat.compress=true
-Dmapreduce.task.timeout=60000
Command:
filterScan 使用过滤器运行扫描测试,根据它的值查找特定行(确保使用--rows = 20)
randomRead 运行随机读取测试
randomSeekScan 运行随机搜索和扫描100测试
randomWrite 运行随机写测试
scan 运行扫描测试(每行读取)
scanRange10 使用开始和停止行(最多10行)运行随机搜索扫描
scanRange100 使用开始和停止行运行随机搜索扫描(最多100行)
scanRange1000 使用开始和停止行(最多1000行)运行随机搜索扫描
scanRange10000 使用开始和停止行运行随机搜索扫描(最多10000行)
sequentialRead 运行顺序读取测试
sequentialWrite 运行顺序写入测试
Args:
nclients 整数。必须要有该参数。客户端总数(和HRegionServers)
running: 1 <= value <= 500
Examples:
运行一个单独的客户端:
$ bin/hbase org.apache.hadoop.hbase.PerformanceEvaluation sequentialWrite 1
参考:https://yq.aliyun.com/articles/594384