OpenTSDB PreSplit Table

Reference Issure
Ref2

  1. 如果metric热度相差不大,即没有某些metric的time series特别多,比如百万级别,而某些metric的time series特别少,比如千级别。
    pre split 设计可以如下:
    start key: \x00\x00\x01
    end   key: \x00\x08\x00  // 假设有2048个metrics
    按照这个范围平均切分 256 个
  1. 如果metric热度相差很大,那么上述的设计可能就不太合理,因为有可能非常热的几个metric分在同一个region. 这种情况下的解决办法比较tricky: 先提取热度较大的metric, 手动预先为其分配UID, 然后每个或者两个可以作为一个region的start key, end key.
    比如:
    metric1, metric2, metric2热度较大, metric3, metric4 .....热度一般
    1. 预先分配UID(参见具体的工具)
    metric1 -> \x00\x00\x01;   metric2 -> \x00\x00\x02;  metric3 -> \x00\x00\x03
    metric3, metric4......可以系统自动分配UID.
    pre split如下:
    前三个metric各自放到一个region, 即:
    region1   startkey: \x00\x00\x01  endkey: \x00\x00\x01
    region2   startkey: \x00\x00\x02  endkey: \x00\x00\x03
    region3   startkey: \x00\x00\x03  endkey: \x00\x00\x04
    剩下的就可以按照1的办法搞定。

切分脚本(jRuby):

#!/usr/bin/hbase org.jruby.Main
# usage: ./create_table.rb tsdb 255
include Java
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.HTableDescriptor
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.HColumnDescriptor

tablename = ARGV[0]
regions = ARGV[1].to_i

hcd  = HColumnDescriptor.new('t')
#hcd.COMPRESSION="COMPRESSION"
#hcd.BLOOMFILTER="BLOOMFILTER"

htd = HTableDescriptor.new(tablename)

htd.addFamily(hcd)
HBaseAdmin.new(HBaseConfiguration.new).createTable(
  htd,
  "\x00\x00\x01".to_java_bytes,
  "\x00\x03\x48".to_java_bytes,
  regions)

使用方法: \x00\x00\x01 换成第一个metric的UID, \x00\x03\x48换成最后一个metric的UID。 执行: ./create.rb tsdb 256 这样会预切分256个region.
这样会预切分256个region.

总结:由于预先评估罗列那些metric的热度较高比较困难,目前就采用第一种方式:确定metric的个数,然后根据startkey, endkey的范围平均切分region。如果后期发现某些region的访问热度特别高,然后在针对这个region做手动切分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值