• HBase1.2.6 预分区后,数据不进入预定分区的一个 bug


    rowkey 如下:

    1900001511504
    2900001511504
    3900001511504
    4900001511504
    5900001511504
    6900001511504
    7900001511504

    插入代码如下:

    public static void asyncBatchPutTest(Connection connection) throws IOException {
            BufferedMutator bufferedMutator = null;
            try {
                bufferedMutator = connection.getBufferedMutator(TableName.valueOf(TableInformation.TABLE_NAME));
                for (int i = 0; i < 100; i++) {
                    int machineId = BaseTypeJudge.reverse(i);
                    String a = BaseTypeJudge.fixBack(machineId + "", 4);
                    String rowKey = a + "00" + Instant.now().getEpochSecond() / 1000;
                    System.out.println(rowKey);
                    Put put = new Put(Bytes.toBytes(Long.parseLong(rowKey)));
                    put.addColumn(Bytes.toBytes(TableInformation.FAMILY_NAME_1), Bytes.toBytes("a"), Bytes.toBytes(i));
                    bufferedMutator.mutate(put);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bufferedMutator != null) bufferedMutator.close();
                if (connection != null) connection.close();
            }
        }

    分区预创建后,rowkey 不能落入预定的分区,最后发现问题在

    Put put = new Put(Bytes.toBytes(Long.parseLong(rowKey)));

    把 Long.parseLong(rowKey) 去掉即可

    原因可能是创建表的时候,设置分区 startkey 和 endkey 时,用的是 String[],如

    String[] keys = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9"};

    而创建 Put 的时候,我把 rowkey 转成了 Long

    同时,String to byte[] 和 Long to byte[] 结果是不一样的,所以,既然 rowkey 就落不进预定分区了

    至于当时为什么想把 rowkey 转成 Long 后,在转 byte,是因为,一串数字 Bytes.toBytes(String) 的 length 是 Bytes.toBytes(Long) 的一倍

  • 相关阅读:
    CentOS7 设置软件镜像源
    让树莓派自动上报IP地址到邮箱,二代B
    给树莓派安装看门狗的两种方法,二代B
    树莓派(Raspberry Pi)USB无线网卡自动连接,二代B
    升级MAC OX上的Python到3.4
    http 返回码 405 解决方案之一
    CentOS 6.4 SSH 免密码登录
    SVN的Hooks功能--强制添加注释
    PHP开发中,让var_dump调试函数输出更美观 ^_^#
    CentOS 6.4 命令行 安装 VMware Tools
  • 原文地址:https://www.cnblogs.com/sorco/p/7890463.html
Copyright © 2020-2023  润新知