最近使用到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 设计与协处理器运用 HBase 是一个基于 HDFS 的分布式、面向列的 NoSQL 数据库,具有高性能、可靠性和扩展性等特点。本文将详细介绍 HBase 的 RowKey 设计和协处理器运用。 HBase 的介绍 HBase 是一...
在HBase中,行键(RowKey)的设计是至关重要的,因为它直接影响到数据的存取效率和查询性能。HBase是一种分布式、列式存储的NoSQL数据库,它以Key-Value的形式存储数据,并且主要依赖RowKey进行快速定位。由于HBase...
《HBase数据读取流程解析——Scan查询》 HBase是一种分布式的、面向列的数据库,广泛应用于大数据处理。在HBase中,数据读取流程相对复杂,尤其是Scan查询,这是由于其独特的数据存储和更新机制。本文将深入探讨...
1. **HBase客户端库**:这是与HBase交互的基础,包含了HBase的API,如`org.apache.hadoop.hbase.client.Connection`和`org.apache.hadoop.hbase.client.Table`等,用于创建连接、打开表、执行Get、Put、Scan等操作。...
在IT行业中,Spring框架是Java领域最常用的轻量级开源框架之一,而HBase则是一个分布式、基于列族的NoSQL数据库,适用于处理大规模数据。本教程将详细讲解如何使用Spring来操作HBase,这对于大数据处理和分布式系统...
10. HBase的rowkey设计技巧包括rowkey的长度原则、散列原则和唯一原则,同时需要考虑避免热点问题,即避免所有数据都集中在某个rowkey上,造成读写瓶颈。 11. HBase的协处理器类似于数据库触发器的概念,提供了在...
HBase构建在Hadoop的HDFS之上,这意味着HBase利用HDFS来存储其底层数据,从而获得HDFS提供的高可靠性和高容错性。 4. **消息通信机制** HBase使用Apache Zookeeper来提供消息通信机制,这包括协调服务、命名服务...
import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter....
### HBase编程实践知识点 #### 一、HBase在Hadoop体系结构中的角色 HBase是一种分布式的、可扩展的大规模数据存储...在未来的工作中,我会更加熟练地使用HBase来解决实际问题,并探索更多关于大数据处理的技术栈。
首先,我们需要了解HBase的查询类型,主要包括get和scan,虽然在用户层面它们看似不同,但在底层实现上,二者本质相同,都是通过查找数据来完成的。当我们在HBase中读取数据时,会涉及到两种主要场景:一是数据尚未...
HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...
hbase(main)> scan 't1',{LIMIT=>5} ``` ##### 3.2.3 查询表中的数据行数 查询表 t1 中的行数,每 100 条显示一次,缓存区为 500: ``` hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500} ``` #### 3.3 ...
HBase是构建在Hadoop文件系统(HDFS)之上的,它提供了实时读写能力,适用于海量数据的存储。其设计灵感来源于Google的Bigtable,但HBase更注重于提供高并发和低延迟的数据访问。HBase的数据模型是基于行的,每个表...
Rowkey的设计应尽量避免热点问题,即某几个Rowkey被频繁访问,而其他Rowkey几乎不被访问,这会导致数据分布不均,影响性能。 在HBase中,Region是表中的数据分片,用于负载均衡。一个表被水平分割成一个或多个...
HBase提供了原生的Java Client/API,包括Get、Scan、Put、Delete等类,以及HTable类用于数据的读写操作,HBaseAdmin类则负责管理任务。此外,HBase还支持非Java客户端通过Thrift访问接口或REST-WebService接口进行...
- 示例中提到,对于日志数据,可以设计多种RowKey格式以适应不同查询需求,如按机器名、时间、事件排序,或者按时间、机器名排序,甚至引入盐值来避免热点问题。 - RowKey长度应尽可能短,以提高存储和检索效率,...
HBase是建立在Hadoop文件系统(HDFS)之上的一种开源、分布式、可扩展的非关系型数据库。它是一种列式存储系统,模仿Google的Bigtable模型,适用于海量数据的实时随机访问。它能够处理超大规模的数据集,通常被用于...
HBase,全称是Apache HBase,是一个分布式的、面向列的开源数据库,它是基于Google的Bigtable模型构建的,运行在Hadoop之上。HBase提供了高度可扩展性和实时读写能力,特别适合处理海量数据。 1. **列族(Column ...
例如,`put 'table', 'rowkey', 'cf:qualifier', 'value'`会将值''value''写入表'table'的行'rowkey'下的列族'cf'的列限定符'qualifier'。 删除数据在HBase中分为单个版本的删除和完全删除两种。单个版本删除可以...