Hbase 做预分区的技巧

作者: 大猪大猪 | 来源:发表于2019-03-06 00:01 被阅读0次

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

    大数据 Hbase 做预分区的技巧

    使用方法

    /**
        * 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
      }
    

    案例使用

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

    val region = 8
    val radix = 10
    val start = "00"
    val end = "99"
    
    println(getSplits(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: 我相信你们不会挑我代码毛病的对吧,哈哈

    Hbase 预分区转换

    相关文章

      网友评论

        本文标题:Hbase 做预分区的技巧

        本文链接:https://www.haomeiwen.com/subject/kpqzuqtx.html