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 改变现有表 ...
随机推荐
- 编程之美 set 17 拈游戏分析 (2)
题目 有 N 块石头河两个玩家 A 和 B. A 先将石头分成若干堆, 然后按照 BABABA... 的顺序轮流取石块, 能将剩下的石头依次取光的玩家获胜. 每次取石头时, 每个玩家只能取一堆的 m( ...
- 剑指 offer set 23 n 个骰子的点数
题目 把 n 个骰子扔到地上, 所有骰子朝上一面的点数之和为 s. 输入 n, 打印出 s 所有可能的值出现的概率. 思路 1. 基于递归的求解方法. 深度为 n 的 dfs, 相当于求全排列, 时间 ...
- 【BZOJ2049,2631,3282,1180】LCT模板四连A
好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> # ...
- [Gradle] 给已存在的 task 添加依赖
需求:在编译宿主 APP 之前先编译两个插件 SamplePlugin1 和 SamplePlugin2 tasks.whenTaskAdded { task -> if (task.name ...
- 关于redux适用的情况
最近在包子在学习redux.redux是一个状态管理的东西.里面有状态树.最开始设计这个redux是为了方便去管理.因为随着web/移动端开发的越来越多元化,都是倾向于组件形式的.但是多个组件她们如果 ...
- 从外部导入数据进MySQL
语法格式: LOAD DATA LOCAL INFILE 'E://test.txt' INTO TABLE test_table FIELDS TERMINATED BY ' ' #ENCLOSED ...
- Python巨蟒全栈开发目录
巨蟒python全栈开发-第一阶段 基础数据类型&基础 1.什么是计算机&&python的简介(待补充) 2.while循环&&格式化输出&&运 ...
- 小程序 Page is not constructed because it is not found.
如下错误一般发生在点击事件切换页面的时候 解决方式: 在需要切换到的那个页面的js文件中添加Page({ })方法即可解决此问题. Tis:在js文件中输入Page回车,可自动添加Page方法,包括里 ...
- datasnap rest Windows客户端编写
首先吐槽一下XE关于datasnap的资料真的是太少了... 服务端用DSHTTPService1控件可以实现http接口方式的调用,返回的都是json格式数据,适用于跨平台解析. 这里着重强调一下d ...
- 解决:“Workbench has not been created yet” error in eclipse plugin programming”,OSGI启动控制台报错问题
项目中使用了OSGI的框架,最近被问到OSGI框架是什么,自己表示几乎没什么认识,于是想自己手动搭建一个OSGI小例子试一试 于是在搭建过程中遇到了下面的问题:项目启动很慢而且控制台也报了很多异常出来 ...