HBaseの - 前のパーティショニング技術

あなたが事前にパーティションデザインのHBaseを取得するために2行のコードを使用することができ、我々は実際に悲惨なことができない書き込みツールは、指で独自の数を必要とする場合、計算される前のパーティションの操作を行い、新たな時間でテーブルを発見していません、これでは、平均範囲の数の地域に基づいて、ツールクラスとして使用することができ、10進数16進数バージョンをご提供します。

9028759-a347afda2d847ab8.png
ビッグデータの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つのリージョンサーバーを持って事前に小数分割したいです

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:私は、ハハ、あなたはそれを私のせいコードを選択しないと考えています


9028759-07315bb8dadcd082.png

おすすめ

転載: blog.csdn.net/weixin_34293141/article/details/90840036