当前位置: 首页 > news >正文

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
http://www.lryc.cn/news/268252.html

相关文章:

  • K8s 教程
  • python:改进型鳟海鞘算法(SSALEO)求解23个基本函数
  • Hive-数据模型详解(超详细)
  • docker的常规使用总结
  • CSS 文字弹跳效果
  • 什么是动态IP?静态IP和动态IP有什么区别?
  • Linux 与 Shell
  • 大数据-Hive练习-环比增长率、同比增长率、复合增长率
  • C++ 考前难点总结
  • ARM 汇编语言知识积累
  • k8s面试之——简述网络模型
  • C语言中关于if else的理解
  • Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)
  • 华纳云:怎么实现Linux主机ssh无密码登录
  • 模型树实操
  • html table+css实现可编辑表格
  • c语言:计算1+2+3……+n的和|练习题
  • Yolov5水果分类识别+pyqt交互式界面
  • 正式环境和sandbox中的RecordTypeId不一样应该怎么办
  • 7种常见的网络安全设备及其功能
  • vue3实现pinia仓库状态持久化
  • Node.js(三)-模块的加载机制
  • 函数
  • 第四周:机器学习知识点回顾
  • 韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理
  • python编程(2)之灯光秀的按钮
  • pandas将dataframe列中的list转换为多列
  • 小巧的Windows Memory Cleaner内存清理工具-释放内存,提升电脑的性能-供大家学习研究参考
  • STM32F072 CAN and USB
  • 卷积神经网络基础与补充