- 性能测试
【免费下载链接】YCSB
Yahoo! Cloud Serving Benchmark
本篇指南面向 MapR 集群运维与存储性能测试工程师,系统讲解如何用 YCSB(Yahoo! Cloud Serving Benchmark)对 MapR-DB(Binary 表)执行负载基准测试。全文以maprdb/README.md的 Quick Start 流程为骨架,深入源码揭示其底层实现(复用 HBase 1.x 客户端),并补充可复制的参数说明与实战注意事项。读完你将掌握:编译 YCSB、创建 MapR-DB Binary 表、加载数据与执行混合读写作负载的完整命令链,以及针对吞吐量/延迟测量场景的参数调优方法。
一、概览:maprdb binding 的技术本质
YCSB 为多种数据库提供统一的压力测试接口(读、写、扫描、删除等),maprdb是其中针对 MapR-DB(Binary 模式)的专用 binding。从源码看,该 binding 的实现非常简洁——MapRDBClient.java 直接继承自site.ycsb.db.hbase1.HBaseClient1:
public class MapRDBClient extends site.ycsb.db.hbase1.HBaseClient1 { }这意味着:
- MapR-DB 的 Binary 表在 API 层面与 HBase 1.x 兼容,YCSB 的 maprdb binding 全部读写逻辑复用 HBaseClient1.java(基于 HBase 原生
Connection/Table/BufferedMutator客户端); - 构建时通过 pom.xml 依赖
org.apache.hbase:hbase-client(版本由${maprhbase.version}控制)与hbase1-binding,因此运行 maprdb 前必须确保 MapR 集群的 HBase 兼容客户端 classpath 可用(下文$(mapr classpath)即完成此事)。
从代码结构可以推断,YCSB 的 maprdb binding 面向的是 MapR-DB 的Binary API(HBase 风格表),而非 JSON 表(JSON 表由maprjsondbbinding 覆盖)。本文所有命令均针对 Binary 表。
二、Quick Start 完整流程
2.1 设置 YCSB:克隆仓库并编译
git clone https://github.com/brianfrankcooper/YCSB.git cd YCSB mvn clean packagemvn clean package会构建 core 与全部 binding 模块,包括maprdb模块(其 Maven 坐标见 pom.xml:site.ycsb:maprdb-binding)。构建产物会落入各模块target目录,并最终由bin/ycsb脚本统一装配 classpath。
2.2 创建 MapR-DB Binary 表
在 MapR 集群节点上使用maprcli命令创建卷、表和列族:
maprcli volume create -name tables -path /tables maprcli table create -path /tables/myTable maprcli table cf create -path /tables/myTable -cfname cf0要点说明:
volume create先建立挂载于/tables的卷(MapR-DB 表必须位于已创建的卷内);table create创建名为/tables/myTable的 Binary 表;table cf create在表中创建列族cf0——这一步至关重要,因为 YCSB 客户端要求表至少含一个列族,且运行时通过-p columnfamily=cf0指定的列族必须真实存在。
2.3 运行 YCSB:加载数据与执行负载
YCSB 的标准流程是“先 load、后 run”:load阶段只执行 insert 操作灌入数据,run阶段按工作负载的比例执行混合读写。
2.3.1 加载数据(load)
./bin/ycsb load maprdb -P workloads/workloada \ -cp $(mapr classpath) \ -p table=/tables/myTable \ -p columnfamily=cf02.3.2 执行负载(run)
./bin/ycsb run maprdb -P workloads/workloadb \ -cp $(mapr classpath) \ -p table=/tables/myTable \ -p columnfamily=cf0命令行参数逐项解读:
| 参数 | 含义 |
|---|---|
load/run | YCSB 两种执行模式:load 仅插入recordcount条记录;run 按 workload 定义的比例混合操作 |
maprdb | 指定使用site.ycsb.db.mapr.MapRDBClient作为数据库驱动 |
-P workloads/workloada | 加载工作负载配置文件(本文示例 load 用 workloada、run 用 workloadb) |
-cp $(mapr classpath) | 追加 MapR 提供的 HBase 兼容客户端 classpath,是连接集群的必要条件 |
-p table=/tables/myTable | 指定目标表(映射到 HBase API 中的TableName) |
-p columnfamily=cf0 | 指定目标列族,对应第 2.2 节创建的表列族 |
工作负载文件位于仓库 workloads 目录,例如 workloada 为 50/50 读写混合(更新密集型)、workloadb 为 95/5 读多写少(读为主型),二者的记录/操作数默认均为 1000,请求分布为 zipfian。
三、底层实现与关键配置参数
3.1 客户端初始化行为(源码级)
maprdb binding 的初始化逻辑全部来自父类 HBaseClient1.init(),结合源码可以确认以下行为:
- 所有 YCSB 线程共享一个
Connection(由ConnectionFactory.createConnection(config)惰性创建),首个线程创建连接时会校验目标表是否存在,表不存在会直接抛出DBException; columnfamily参数为必填项,未指定时客户端报错Error, must specify a columnfamily for HBase table并抛出DBException;table参数可省略,默认值为usertable(见 CoreWorkload.java 的TABLENAME_PROPERTY_DEFAULT),MapR 场景建议始终显式指定。
3.2 可调参数表
除table、columnfamily外,maprdb(经由 HBaseClient1)还支持以下-p参数,用于控制性能测量与写入行为:
| 参数 | 默认值 | 说明 |
|---|---|---|
columnfamily | 无(必填) | 目标列族名,缺省会抛异常 |
table | usertable | 目标表名,建议显式指定 |
clientbuffering | false | 是否启用客户端侧缓冲批量写入。测量 insert/update/delete 延迟时应保持关闭(false),否则延迟被批处理掩盖 |
writebuffersize | 12MB(1024*1024*12) | 客户端缓冲上限,仅clientbuffering=true时生效 |
durability | USE_DEFAULT | 写入是否落 WAL(如SKIP_WAL可提升吞吐但牺牲崩溃恢复能力) |
hbase.usepagefilter | true | scan 时是否使用PageFilter限制扫描行数 |
debug | false | 是否输出调试日志(会打印 key、field/value 明细) |
principal/keytab | 无 | Kerberos 安全集群下的认证信息(HBase 兼容客户端场景) |
3.3 延迟测量与缓冲的权衡
父类源码中clientSideBuffering默认false;当clientbuffering=true时,写入会进入BufferedMutator(由getHTable创建),此时cleanup()阶段会以UPDATE类型统一计量缓冲 flush 耗时;关闭缓冲时写入走currentTable.put(p)直连路径,单次操作延迟真实可测。因此在追求真实延迟数据的基准测试中,应使用默认(不开启缓冲)配置;在追求最高写入吞吐时,可开启-p clientbuffering=true并按需调大writebuffersize。
四、实战注意事项与排错
- classpath 是头号坑:
-cp $(mapr classpath)必须正确展开,否则会抛ClassNotFoundException(缺 HBase 客户端类)。请确认在安装了 MapR 客户端的节点上执行。 - 列族必须预创建:
table cf create步骤不可省略,且-p columnfamily必须与创建的列族名完全一致;客户端初始化时也会对表存在性做前置校验。 - load 与 run 需配套:
run依赖load已写入的数据,若表为空,读操作将大量返回NOT_FOUND。可用同一份 workload 文件先 load 再 run,也可分别用 workloada(插入数据)与 workloadb(读多写少)组合。 - JDK 兼容性提示:maprdb 模块的 pom 中设置了
skipJDK9Tests=true,即测试用例默认不在 JDK 9 上执行(maprdb/pom.xml),构建与运行请优先使用受支持的 JDK 8 环境。
五、小结
YCSB 的 maprdb binding 以极简方式复用了成熟、稳定的 HBase 1.x 客户端实现(MapRDBClient.java),使任何熟悉 HBase 的工程师都能快速对 MapR-DB Binary 表开展标准化的性能基准测试。整个流程只需四步:编译 YCSB → 创建卷/表/列族 →load灌数据 →run跑负载;再配合clientbuffering、durability、writebuffersize等参数,即可在吞吐优先与延迟精确测量之间灵活切换。
- 性能测试
【免费下载链接】YCSB
Yahoo! Cloud Serving Benchmark
相关推荐
YCSB 实战:使用 maprjsondb 绑定对 MapR-DB JSON 表执行基准测试
YCSB 实战:使用 maprjsondb 绑定对 MapR DB JSON 表执行基准测试 导读 本文介绍如何在 MapR 集群上,使用 YCSB(Yahoo
性能测试使用 YCSB 对 Azure Cosmos DB 进行基准测试:从快速上手到配置参数与源码原理全解析
使用 YCSB 对 Azure Cosmos DB 进行基准测试:从快速上手到配置参数与源码原理全解析 本文基于 YCSB 仓库中的 Azure Cosmos
性能测试使用 YCSB 对 GridDB 进行 NoSQL 基准测试:GridDB Binding 完整配置与运行指南
使用 YCSB 对 GridDB 进行 NoSQL 基准测试:GridDB Binding 完整配置与运行指南 导读 GridDB 是东芝(TOSHIBA Di
性能测试
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考