Hbase - 预分区的技巧

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

![大数据 Hbase 做预分区的技巧](https://upload-images.jianshu.io/upload_images/9028759-a347afda2d847ab8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 使用方法

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: 我相信你们不会挑我代码毛病的对吧,哈哈**

---

![](https://upload-images.jianshu.io/upload_images/9028759-07315bb8dadcd082.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2019-05-24 姓名:沈璞 单位:太仓市天丝利塑化有限公司 六项精进519期学员【日精进打卡第6天】 【知~...
    倾注你的笑_1802阅读 1,241评论 0 0
  • 2019-05-24 哈尔滨第380期利他二组简书作者 姓名:周翔 扬州市方圆建筑工程有限公司 【日精进打卡第36...
    香蕉香蕉_2917阅读 1,462评论 0 0
  • 没有测试的代码就是耍流氓 rspec(1) - summary specs(2) - model specs(3)...
    auguszou阅读 3,025评论 0 0
  • 一直以来对《人间失格》这本书都有所耳闻,也曾看过据说是根据这本书改编的《被嫌弃的松子的一生》,看完之后的我心情很平...
    汐情阅读 2,166评论 0 1
  • 总想写点什么却又不知道要些什么,总想做些什么又总有对什么都无从下手的无力感。 这是这周最大一次活动量的留影,去办公...
    曦什阅读 1,579评论 0 1