为Hbase设计复合rowkey

时间:2018-02-13 06:52:26

标签: hadoop hbase

我正在尝试创建一个具有以下结构的hbase表。

**rowkey**                  |**CF1**
(customerid,txtimestamp)|customerid,amount
  1. 我想在特定时间段内使用customerid查询记录。
  2. 我的rowkey以反向顺序和事务时间戳使用客户ID。
  3. Long customerid = Long.valueOf(new StringBuilder(customerid).reverse()。toString());

    byte [] rowKey = Bytes.add(Bytes.toBytes(customerid),Bytes.toBytes(txtimestamp.getTime()));

    1. 如何设置行键以便将其拆分为4个区域服务器?
    2. 是否有任何有效的行键设计方法?

1 个答案:

答案 0 :(得分:1)

您不需要撤销customer_id,这没有任何意义

如果要将所有数据拆分为4个区域,则可以为所有键添加0-3值前缀,例如:

int partition = customer_id % 4;
byte[] rowKey = Bytes.add(
                   Bytes.toBytes(String.valueOf(partition)),
                   Bytes.toBytes(String.valueOf(customer_id)),
                   Bytes.toBytes(txTimestamp.getTime())
                );

在这种情况下,您需要使用此HBaseAdmin方法

创建包含拆分键的表
public void createTable(final HTableDescriptor desc, byte [][] splitKeys)

拆分键将是:

byte[][] splitKeys = new byte[3][];
splitKeys[0] = "1".getBytes();
splitKeys[1] = "2".getBytes();
splitKeys[2] = "3".getBytes();

因此所有以0开头的键都会转到第一个区域,以1开头的键会转到第二个区域,依此类推