YCSB 测试表预分区
2023-12-26 23:41:22
最近使用 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
文章来源:https://blog.csdn.net/bluishglc/article/details/135233121
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!