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=510

sudo pkill -f ycsb

cat << EOF | sudo -u hbase hbase shell
truncate '${TABLE_NAME}'
disable '${TABLE_NAME}'
drop '${TABLE_NAME}'
EOF

cat << 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}'
EOF

nohup 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

相关推荐

  1. YCSB 测试分区

    2023-12-30 02:36:02       52 阅读
  2. hbase建时设置分区

    2023-12-30 02:36:02       30 阅读
  3. hbase分区

    2023-12-30 02:36:02       55 阅读
  4. 分库,分,分区,分片

    2023-12-30 02:36:02       38 阅读
  5. 【PostgreSQL】管理-分区

    2023-12-30 02:36:02       40 阅读
  6. oracle分区分区exchange

    2023-12-30 02:36:02       38 阅读
  7. mysql 分区类型

    2023-12-30 02:36:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 02:36:02       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 02:36:02       80 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 02:36:02       64 阅读
  4. Python语言-面向对象

    2023-12-30 02:36:02       75 阅读

热门阅读

  1. Netty学习

    2023-12-30 02:36:02       56 阅读
  2. 聊一聊Spring Bean 的生命周期

    2023-12-30 02:36:02       53 阅读
  3. 【PHP】API传参时,判断数字最多两位小数

    2023-12-30 02:36:02       50 阅读
  4. 服务简介及问题答疑

    2023-12-30 02:36:02       50 阅读
  5. 小秋SLAM入门实战深度学习所有文章汇总

    2023-12-30 02:36:02       54 阅读