`

hbase之scan的rowkey问题

阅读更多

最近使用到hbase做存储,发现使用scan的时候,返回的rowkey并不是特别友好

 

例如我insert的rowkey是 xyz_123_abc

 

调用KeyValue的getKeyString方法返回的String为

 

Java代码   收藏代码
  1. 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的方法

 

Java代码   收藏代码
  1. public  String toString() {  
  2.     if  ( this .bytes ==  null  ||  this .bytes.length ==  0 ) {  
  3.       return   "empty" ;  
  4.     }  
  5.     return  keyToString( this .bytes,  this .offset + ROW_OFFSET, getKeyLength()) +  
  6.       "/vlen="  + getValueLength();  
  7.   }  

 

接着看keyToString方法,摘取最前面重要的2段

 

Java代码   收藏代码
  1. public   static  String keyToString( final   byte  [] b,  final   int  o,  final   int  l) {  
  2.    if  (b ==  null return   "" ;  
  3.    int  rowlength = Bytes.toShort(b, o);  
  4.    String row = Bytes.toStringBinary(b, o + Bytes.SIZEOF_SHORT, rowlength);  

 

这次终于找到了他的构成方法了,ok 对照KeyValue的API 可以写个util方法来获取真实的rowkey字符串了

 

Java代码   收藏代码
  1. public   static  String getRealRowKey(KeyValue kv) {  
  2.         int  rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);  
  3.         String rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);  
  4.         return  rowKey;  
  5.     }  

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    hbase的rowkey设计与hbase的协处理器运用.docx

    HBase RowKey 设计与协处理器运用 HBase 是一个基于 HDFS 的分布式、面向列的 NoSQL 数据库,具有高性能、可靠性和扩展性等特点。本文将详细介绍 HBase 的 RowKey 设计和协处理器运用。 HBase 的介绍 HBase 是一...

    Hbase行键设计(rowkey)实现多条件查询

    在HBase中,行键(RowKey)的设计是至关重要的,因为它直接影响到数据的存取效率和查询性能。HBase是一种分布式、列式存储的NoSQL数据库,它以Key-Value的形式存储数据,并且主要依赖RowKey进行快速定位。由于HBase...

    HBase数据读取流程解析-3——scan查询.pdf

    《HBase数据读取流程解析——Scan查询》 HBase是一种分布式的、面向列的数据库,广泛应用于大数据处理。在HBase中,数据读取流程相对复杂,尤其是Scan查询,这是由于其独特的数据存储和更新机制。本文将深入探讨...

    HBase使用的jar包

    1. **HBase客户端库**:这是与HBase交互的基础,包含了HBase的API,如`org.apache.hadoop.hbase.client.Connection`和`org.apache.hadoop.hbase.client.Table`等,用于创建连接、打开表、执行Get、Put、Scan等操作。...

    spring操作hbase demo

    在IT行业中,Spring框架是Java领域最常用的轻量级开源框架之一,而HBase则是一个分布式、基于列族的NoSQL数据库,适用于处理大规模数据。本教程将详细讲解如何使用Spring来操作HBase,这对于大数据处理和分布式系统...

    超全的HBase知识体系总结.pdf

    10. HBase的rowkey设计技巧包括rowkey的长度原则、散列原则和唯一原则,同时需要考虑避免热点问题,即避免所有数据都集中在某个rowkey上,造成读写瓶颈。 11. HBase的协处理器类似于数据库触发器的概念,提供了在...

    大数据HBASE考题材料

    HBase构建在Hadoop的HDFS之上,这意味着HBase利用HDFS来存储其底层数据,从而获得HDFS提供的高可靠性和高容错性。 4. **消息通信机制** HBase使用Apache Zookeeper来提供消息通信机制,这包括协调服务、命名服务...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    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编程实践知识点 #### 一、HBase在Hadoop体系结构中的角色 HBase是一种分布式的、可扩展的大规模数据存储...在未来的工作中,我会更加熟练地使用HBase来解决实际问题,并探索更多关于大数据处理的技术栈。

    HBase查询的深入研究

    首先,我们需要了解HBase的查询类型,主要包括get和scan,虽然在用户层面它们看似不同,但在底层实现上,二者本质相同,都是通过查找数据来完成的。当我们在HBase中读取数据时,会涉及到两种主要场景:一是数据尚未...

    hbase资料api

    HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...

    hadoop和HBase常用shell命令

    hbase(main)> scan 't1',{LIMIT=>5} ``` ##### 3.2.3 查询表中的数据行数 查询表 t1 中的行数,每 100 条显示一次,缓存区为 500: ``` hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500} ``` #### 3.3 ...

    大数据hbase.zip

    HBase是构建在Hadoop文件系统(HDFS)之上的,它提供了实时读写能力,适用于海量数据的存储。其设计灵感来源于Google的Bigtable,但HBase更注重于提供高并发和低延迟的数据访问。HBase的数据模型是基于行的,每个表...

    hbase技术分享

    Rowkey的设计应尽量避免热点问题,即某几个Rowkey被频繁访问,而其他Rowkey几乎不被访问,这会导致数据分布不均,影响性能。 在HBase中,Region是表中的数据分片,用于负载均衡。一个表被水平分割成一个或多个...

    大数据处理:HBASE.ppt

    - 示例中提到,对于日志数据,可以设计多种RowKey格式以适应不同查询需求,如按机器名、时间、事件排序,或者按时间、机器名排序,甚至引入盐值来避免热点问题。 - RowKey长度应尽可能短,以提高存储和检索效率,...

    hbase入门和使用

    HBase是建立在Hadoop文件系统(HDFS)之上的一种开源、分布式、可扩展的非关系型数据库。它是一种列式存储系统,模仿Google的Bigtable模型,适用于海量数据的实时随机访问。它能够处理超大规模的数据集,通常被用于...

    hbase基本概念和hbase shell常用命令用法

    HBase,全称是Apache HBase,是一个分布式的、面向列的开源数据库,它是基于Google的Bigtable模型构建的,运行在Hadoop之上。HBase提供了高度可扩展性和实时读写能力,特别适合处理海量数据。 1. **列族(Column ...

    hbase的操作数据demo

    例如,`put 'table', 'rowkey', 'cf:qualifier', 'value'`会将值''value''写入表'table'的行'rowkey'下的列族'cf'的列限定符'qualifier'。 删除数据在HBase中分为单个版本的删除和完全删除两种。单个版本删除可以...

Global site tag (gtag.js) - Google Analytics