YCSB 测试表预分区

2023-12-27 22:20
文章标签 测试 分区 ycsb 表预

本文主要是介绍YCSB 测试表预分区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近使用 YCSB 测试时,一直使用如下方法创建预分区:

TABLE_NAME="usertable"
REGIN_SPLITS=$((510-1))
cat << EOF | sudo -u hbase hbase shell
create '${TABLE_NAME}', 'cf', {SPLITS => (1..${REGIN_SPLITS}).map {|i| "user#{1000+i*(9999-1000)/${REGIN_SPLITS}}"}}
describe '${TABLE_NAME}'
EOF

但是这样创建出来的分区其实头和尾两个分区是没有数据的,因为它的RowKey Range将分别是:

  • Start Key = 空, End Key = user1000
  • Start Key = user9999, End Key= 空

而 YCSB 自动生成的 Rowkey 是从 user1xxxx 开始的,user1000 之前不会有任何数据,user9999 之后只会有极少的数据,所以,应该修正分区的 row key 切分,改下面的方式就非常均衡了:

TABLE_NAME="usertable"
REGIN_SPLITS=510
cat << EOF | sudo -u hbase hbase shell
create '${TABLE_NAME}', 'cf', {SPLITS => (2..${REGIN_SPLITS}).map {|i| "user#{1000+(i-1)*(9999-1000)/${REGIN_SPLITS}}"}}
describe '${TABLE_NAME}'
EOF

头和尾两个分区的RowKey Range将分别是:

  • Start Key = 空, End Key = user1017
  • Start Key = user9981, End Key= 空

以下给出一份完整脚本(数据表禁用了auto split),注意:该脚本适用于 EMR 5.23.0, HBase 1.4.9,在其他版本上测试时可能需要修改!

export TABLE_NAME="usertable"
export SNAPSHOT_NAME="usertable-snapshot"
export YCSB_VERSION="0.17.0"
export HBASE_VERSION="hbase14"
export YCSB_HOME="/opt/ycsb-${HBASE_VERSION}-binding-${YCSB_VERSION}"
export YCSB_HISTORICAL_RECORD_COUNT=1048576 # history data volume: 10 TB
export REGIN_SPLITS=510sudo pkill -f ycsbcat << EOF | sudo -u hbase hbase shell
truncate '${TABLE_NAME}'
disable '${TABLE_NAME}'
drop '${TABLE_NAME}'
EOFcat << EOF | sudo -u hbase hbase shell
create '${TABLE_NAME}', 'cf', {METADATA => {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy'}}, {SPLITS => (2..${REGIN_SPLITS}).map {|i| "user#{1000+(i-1)*(9999-1000)/${REGIN_SPLITS}}"}}
describe '${TABLE_NAME}'
EOFnohup sudo -u hbase $YCSB_HOME/bin/ycsb load $HBASE_VERSION \-cp /etc/hbase/conf/ \-p table=$TABLE_NAME \-p columnfamily=cf \-p recordcount=$YCSB_HISTORICAL_RECORD_COUNT \-p fieldcount=10 \-p fieldlength=1048576 \-p workload=site.ycsb.workloads.CoreWorkload \-p clientSideBuffering=true \-p writebuffersize=34359738368 \-threads 60 \-s &> ycsb-historical-load.out &tail -f ycsb-historical-load.out

这篇关于YCSB 测试表预分区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544443

相关文章

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接