hbase KeyValue结构打印

本文介绍了HBase中表内容的查询方式,并通过一段Java代码示例展示了如何获取HBase表中的特定数据。具体地,文章详细解释了如何使用Get对象获取指定行键的数据,并通过Result对象解析出KeyValue,进而获取其row、family、qualifier、timestamp和value等关键属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、表内容

hbase(main):003:0> scan ‘tableCreateTest1’

ROWCOLUMN+CELL
row1column=cf1:name, timestamp=1467639285495, value=zq

1 row(s) in 0.0210 seconds

二、KeyValue

1.片段代码

Get get = new Get(Bytes.toBytes("row1"));
try {
    Result rs = ht.get(get);
    System.out.println("result size: " + rs.size());
    System.out.println("result.toString: " + rs.toString());

    KeyValue kv = rs.getColumnLatest(Bytes.toBytes("cf1"), Bytes.toBytes("name"));
    System.out.println("kv key: " + Bytes.toString(kv.getKey()));
    System.out.println("kv key: " + kv.getKeyString());
    System.out.println("kv key: " + KeyValue.keyToString(kv.getKey()));
    System.out.println("kv row: " + Bytes.toString(kv.getRow()));
    System.out.println("kv family: " + Bytes.toString(kv.getFamily()));
    System.out.println("kv qualifier: " + Bytes.toString(kv.getQualifier()));
    System.out.println("kv timestam: " + String.valueOf(kv.getTimestamp()));
    System.out.println("kv value: " + Bytes.toString(kv.getValue()));
} catch (IOException e) {
    e.printStackTrace();
}

2.结果

result size: 1
result.toString: keyvalues={row1/cf1:name/1467639285495/Put/vlen=2/mvcc=0}

kv key: row1cf1nameU�F�
kv key:\x00\x04row1\x03cf1name\x00\x00\x01U\xB61\x1B\xF1\x04
kv key: row1/cf1:name/1467639285495/Put
kv row: row1
kv family: cf1
kv qualifier: name
kv timestam: 1467639285495
kv value: zq
### HBase 底层存储文件类型及结构 #### 文件类型 HBase 中的数据最终会持久化到分布式文件系统 (通常是 HDFS),其主要使用的文件格式为 **HFile**。这种文件格式专为支持快速查找而设计,能够高效处理大规模数据集。 - **HFile 特征** - 是一种不可变的、有序的键值对集合。 - 支持高效的随机读取操作以及批量写入优化[^3]。 #### 存储结构详解 在 HBase 内部,表被划分为多个区域(Region), 而每个 Region 又由若干个 Store 组成;每一个 Store 对应一个列族(Column Family)。Store 下面则是 MemStore 和 StoreFiles(HFiles)[^4]: - **MemStore**: 当客户端向服务器发送 Put 请求时,新来的更新会被先存放在内存中的 MemStore。当 MemStore 达到了一定大小之后就会触发刷盘动作(Flushing Process),此时 MemStore 的内容将会序列化并保存至磁盘上的 HFile 文件中。 - **StoreFiles (HFiles)**: 这些是由之前提到过的 Flush 或者 Compaction 流程产生的永久性存储单元。随着不断有新的修改到来,旧的日志文件(WAL)也会逐渐被淘汰掉,转而在这些更紧凑且易于检索的形式里找到它们的身影。 ```java // 创建一个新的 HTable 实例连接指定名称表格 HTable table = new HTable(conf, "testtable"); // 获取特定 row key 所对应的结果对象 Result result = table.get(new Get(Bytes.toBytes("row1"))); // 遍历该行所有的 cell 并打印出来 for(KeyValue kv : result.raw()){ System.out.println( Bytes.toString(kv.getRow()) + " " + Bytes.toString(kv.getFamily()) + ":"+ Bytes.toString(kv.getQualifier())+" "+ Bytes.toString(kv.getValue()) ); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值