split命令

kh212irz  于 2021-06-10  发布在  Hbase
关注(0)|答案(2)|浏览(527)

我正在尝试用cdh ycsb包在hbase上运行ycsb。我关注cloudera的博客ycsb nosql基准测试的开放标准加入cloudera实验室。在这个博客里,我看到了下面的命令,

hbase(main):001:0> n_splits = 200 # HBase recommends (10 * number of regionservers)
``` `hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}` .
这是什么意思 `{SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}` 什么意思?我知道这是用来分割区域的。但是我找不到上面的命令到底在做什么?请帮助我更好地理解这一点。
zyfwsgd6

zyfwsgd61#

这里说的是Rubyhttp://hbase.apache.org/book.html#shell
apachehbase shell是ruby的irb,添加了一些hbase特定命令。在irb中可以做的任何事情,都应该能够在hbase shell中做。
首先声明一个分裂数变量

hbase(main):001:0> n_splits = 200 # HBase recommends (10 * number of regionservers)

然后使用ruby语法生成一个数组作为“create”命令的splits参数

hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}

甚至命令'create'本身也是一个ruby函数。您可以在$hbase\u home/lib/ruby/shell/commands中找到定义

mtb9vblg

mtb9vblg2#

正如您已经提到的,该命令正在区域中预拆分表。这对于ycsb是建议的,因为性能测试加载了大量数据,这些数据会落在单个区域服务器上,并且由于数据不会分布在集群中,因此最终的评估结果很差。
理想的分裂数取决于其他因素。我不确定他们为什么选择这个公式,但我猜这是因为工作量的例子。
您还可以在ruby online工具上运行该命令并亲自检查结果:

user1044
user1089
user1134
user1179
...
user9999

相关问题