最近使用到hbase做存储,发现使用scan的时候,返回的rowkey并不是特别友好
例如我insert的rowkey是 xyz_123_abc
调用KeyValue的getKeyString方法返回的String为
kv\x00\x0Bxyz_123_abc\x02kvobj\x00\x00\x011\xD7\xB9\xDD\x1B\x04
可以看到我的rowkey已经被处理过了,不过这个处理只是拼接处理,没有其他译码的过程。
好吧,这下需要考虑如何提取出我的真实的rowkey了,看了下KeyValue中,生成key的算法太繁琐了,直接跳过,debug看下rowkey的返回过程,发现KeyValue对象本身其实是正常的,也就是说KeyValue的toString方法其实有正常的rowkey,ok找到入口点了,直接看toString的方法
public String toString() {
if (this.bytes == null || this.bytes.length == 0) {
return "empty";
}
return keyToString(this.bytes, this.offset + ROW_OFFSET, getKeyLength()) +
"/vlen=" + getValueLength();
}
接着看keyToString方法,摘取最前面重要的2段
public static String keyToString(final byte [] b, final int o, final int l) {
if (b == null) return "";
int rowlength = Bytes.toShort(b, o);
String row = Bytes.toStringBinary(b, o + Bytes.SIZEOF_SHORT, rowlength);
这次终于找到了他的构成方法了,ok 对照KeyValue的API 可以写个util方法来获取真实的rowkey字符串了
public static String getRealRowKey(KeyValue kv) {
int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);
String rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);
return rowKey;
}
分享到:
相关推荐
hbase的Rowkey设计⽅案 1.1 hbase的概述 的概述 HBase由于其存储和读写的⾼性能,在OLAP即时分析中越来越发挥重要的作⽤。作为Nosql数据库的⼀员,HBase查询只能通过其 Rowkey来查询(Rowkey⽤来表⽰唯⼀⼀⾏记录),...
HBASE调优 HBASE技术框架与存储模型 v HBASE调优 v 硬件 v 系统参数 v java v 表的设计 v 客户端 v 服务器端
HBase-RowKey与索引设计(高清) HBase-RowKey与索引设计(高清)HBase-RowKey与索引设计(高清)
该文档是介绍hbase的rowkey设计与hbase的协处理器运用,与大家分享!
大数据性能调优之HBase的RowKey设计.docx
阿里云 吴阳平(明惠) 阿里云HBase业务架构师 主要章节:
Spark存储数据到HBase实现RowKey完全散列-多进程多线程间Random完全随机,完美解决热点问题
2-2+HBase-RowKey+与索引设计
用户历史订单列表查询rowkey设计技巧 最左前缀原则
HBASE的使用跟业务逻辑有很强的关联性,就像本文里提到的例子使用ElasticSearch更合适。...本文主要内容是通过合理hbase行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后
也算是Scan系列的其中一篇吧,后面对于Scan还会有一篇结合HDFS分析HBase数据读取在HDFS层面是怎么一个流程,敬请期待。HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI、TableScanMR以及SnapshotScanMR
Java 操作HBase的封装,使用注解的方式将实体类与HBase完成ORM映射,注解有HBaseTable HBaseColumn Rowkey
│ Hbase表中rowkey及列簇的设计 │ Hbase表设计-微博案例的表设计 │ Hbase表设计-微博案例的业务实现 │ Hbase列簇属性的介绍 │ Hbase性能优化-GC调优 │ Hbase性能优化-内存管理 │ Hbase性能优化-flush、...
hbase shell命令详解
HBase中,表会被划分为1...n个Region,被托管在RegionServer中。Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-endkey范围内,那么就会定位...
HBase在不同版本(1.x, 2.x, 3.0)中针对不同类型的硬件(以IO为例,HDD/SATA-SSD/PCIe-SSD/Cloud)和场景(single/batch, get/scan)做了(即将做)各种不同的优化,这些优化都有哪些?如何针对自己的生产业务和...
基于HBase的网络社区海量数据存储优化研究,吴旭,郭建,基于HBase自动根据Rowkey排序表中数据的特性,在组织网络社区海量数据的存储结构时添加了时间戳以便按照时间段对海量数据进行查询,H
HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1). 数据模式 3 2). HBase的基本元素: 4 3) ...
课时19:搭建分布式HBase集群之HBase部署 课时20:sqoop2部署 课时21:使用sqoop2将mysql数据导入到HBase 课时22:集群管理之节点管理与数据任务 课时23:Rowkey设计与集群常见故障处理 课时24:集群调优经验...