描述
for (String attendUid : attendUids) {
// 范围 uid_ => uid_************ => uid|
// 范围的获取是根据unicode码来判断 uid_ 小于 所有 uid_* 而 | 的unicode码比 _ 大 所以大于所有的 uid_....
Scan scan = new Scan(Bytes.toBytes(attendUid +"_"), Bytes.toBytes(attendUid+"|"));
ResultScanner results = contentTable.getScanner(scan);
// 一个 Result 对应的是 一个 rowkey 的信息
for (Result result : results) {
// 获取rowkey
byte[] rowKey = result.getRow();
// 获取对应的时间戳
long ts = Long.parseLong(Bytes.toString(rowKey).split("_")[1]);
// 封装信息
// 列族 , 接收微博内容的粉丝的uid, 发送的时间戳, 微博内容的uid
inboxPut.addColumn(Bytes.toBytes("info"),Bytes.toBytes(attendUid),ts,rowKey);
}
inboxTable.put(inboxPut);
// 释放连接
contentTable.close();
relationsTable.close();
inboxTable.close();
connection.close();
}
我需要扫描指定范围的rowkey , 在执行以上代码的时候报错 然后我看了抛出这个异常的原因 :
当扫描表时连接断开的时候,则会报这个错 , 我百思不得其解 , 不晓得为什么它会突然断开,然后就 debug.
因为我要扫描 1002 和 1003 这个两个 rowkey范围的数据
rowkey是 1002_时间戳拼接的 , 然后发现 1002可以扫描到 , 但是 1003 不行 ?
我以为是 1003 的数据不在表中所以才会出现这个问题 , 然后 发现不是, 我在 HBase shell 中可以正常查询 , 我一直以为是 Scan 那个部分代码的问题 , 也没往下翻 , 然后我就顺手翻了下,然后我就想打自己两巴掌 , 我把关闭连接的代码写 for 循环里面了 … 可以看到上面的代码 …
然后 把 关闭连接的代码拿出来就可以了 …