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) 的一倍
HBase1.2.6 预分区后,数据不进入预定分区的一个 bug的更多相关文章
- php 获取上上个月数据 使用 strtotime('-1 months')的一个bug
今天,使用php 日期函数处理数据,发现一个问题. 具体场景是这样的,我一直以为strtotime 格式化当前日期 或 指定日期可以找到对应的数据,比如我要查找上上个与的数据,因为我要获取当前时间的 ...
- oracle表空间表分区详解及oracle表分区查询使用方法(转+整理)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区(转载)
一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1 create table graderecord 2 ( 3 sno varchar2(10), 4 sname varcha ...
- Atitit 分区后的查询 mysql分区记录的流程与原理
Atitit 分区后的查询 mysql分区记录的流程与原理 1.1.1. ibd是MySQL数据文件.索引文件1 1.2. 已经又数据了,如何分区? 给已有的表加上分区 ]1 1.3. 分成4个区, ...
- aliyun添加数据盘后的物理分区和lvm逻辑卷两种挂载方式
一.普通磁盘分区管理方式 1.对磁盘进行分区 列出磁盘 # fdisk -l # fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Change ...
- aliyun添加数据盘parted方式分区格式化和lvm挂载及数据盘的扩容
一.普通磁盘分区管理方式 1.对磁盘进行分区 列出磁盘 # fdisk -l # fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Change ...
- 基于spring的web项目启动时预加载数据到ServletContext
1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...
- 45.oracle表类型、数据拆分、表分区
不要做一些没有意义的事情,就比如说你要离职并不打算吃回头草,离职理由中完全没有必要说明“领导的水平太渣,人品太差”此类的原因,而是“个人原因”,当然实在不批准辞职另说. oracle表类型 表的类型分 ...
- mysql 分区后查询效率
准备工作: 蠕虫复制 文章表 增加数据到112万 语法:insert into tableNameA select * from tableNameB 未分区查询 54s 改变现有表 ...
随机推荐
- easyui上次图片
easyuiForm提交: 前台代码: <form id="importFileForm" method="post" enctype="mul ...
- 面试题思考:解释一下什么叫AOP(面向切面编程)
这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. AOP是Spring提供的关键特性之一.AOP即面向切面编程,是OOP编程的有效补充. 使用AOP技术,可以将一 ...
- Jquery判断某个标签 Id是否存在
query判断某个标签 Id是否存在, 如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的 if($("#id")){}else{} 因为 $(“#id”) 不管对象 ...
- nginx排错error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such file or directory
启动nginx报错:error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such f ...
- html的table列表根据奇数还是偶数行显示不同颜色
<tr <s:if test="#sts.even"> class="table_1" onMouseOut="this.class ...
- 简单的纯css重置input单选多选按钮的样式--利用伪类
由于input单选多选的原生样式通常都不符合需求,所以在实现功能时通常都需要美化按钮 html <input type="radio" /> <input typ ...
- 160505、oracle 修改字符集 修改为ZHS16GBK
修改oracle字符集 方法/步骤 oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中N ...
- Struts2数据验证与使用Java代码进行数据验证
Struts2数据验证 使用Java代码进行数据验证 重写ActionSupport的validate()方法 对Action类的中所有请求处理方法都会进行验证! 对Action类的数据属性进行检查, ...
- Java中的常用方法
Java中的常用方法 第一章 字符串 1.获取字符串的长度:length() 2.判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith(String s).后缀 endsWit ...
- CH5E01 乌龟棋【线性DP】
5E01 乌龟棋 0x5E「动态规划」练习 描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1 格是唯一的起点,第N 格是终点 ...