Hbase - 预分区的技巧

可以用两行代码搞定Hbase的预分区设计,我们在新建一张表的时候有没有发现,做预分区其实也是要计算的,如果没有写上工具类那可惨了,需要自己用手指头算了,在这给大家提供了一个10进制跟16进制的版本,会根据Region数来平均范围,大家可以当成工具类来使用。

大数据 Hbase 做预分区的技巧

使用方法

scala 版本

/**
    * Hbase 预分区转换
    * @param region Hbase regionServer 的节点数
    * @param radix 进制 10 | 16
    * @param start 开始 => 比如:00
    * @param end 结束 => 比如:ff
    * @return Array
    */
  def getSplitForRadix(region: Int, radix: Int, start: String, end: String): Array[String] = {
    val range = start.toInt to java.lang.Long.valueOf(end, radix).toInt
    range
      .filter(_ % (range.size / region) == 0)
      .map(if (radix == 16) Integer.toHexString else _.toString)
      .tail //Hbase 左闭右开
      .toArray
  }

java版本

public static List<String> getSplitForRadix(int region, int radix, String start, String end) {
        Integer s = Integer.parseInt(start);
        Integer e = Long.valueOf(end, radix).intValue() + 1;
        return IntStream
                .range(s, e)
                .filter(value -> (value % ((e - s) / region)) == 0)
                .mapToObj(value -> {
                    if (radix == 16) {
                        return Integer.toHexString(value);
                    } else {
                        return String.valueOf(value);
                    }
                })
                .skip(1)
                .collect(Collectors.toList());
    }

案例使用

我有8台RegionServer,想做10进制的预分区

val region = 8
val radix = 10
val start = "00"
val end = "99"

println(getSplitForRadix(region, radix, start, end).mkString(","))

生成结果如下

12,24,36,48,60,72,84,96

如果是16进制的预分区

val region = 8
val radix = 16
val start = "00"
val end = "ff"

println(getSplits(region, radix, start, end).mkString(","))

生成结果如下

20,40,60,80,a0,c0,e0

PS: 我相信你们不会挑我代码毛病的对吧,哈哈


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 还有三个小时,我坐在电脑前静静等待四月的到来。暖气停了好几天了,导致我现在坐在电脑前手脚冰凉,现在很平静,只是有个...
    bvxvmplpjl阅读 1,162评论 0 0
  • 今天回家路上,王先生突然连了蓝牙,不知道他什么时候下载的追和风继续吹,慌忙想起了什么,一看手机,他的生日如期而至,...
    阳羊漾阅读 1,184评论 0 0
  • 最近几天一直在读的这本书是武志红的为何家会伤人,这是用了kindleunlimited读的,感觉很好的一本书,于是...
    雀岛札记阅读 3,502评论 0 0
  • 一开始,旅行对我来说的确像一种逃避。走向社会的我发现当时自己的工作并非想象的模样,虽已极力去接受它,喜爱它,专注它...
    春少邪阅读 1,828评论 1 2

友情链接更多精彩内容