2017-02-20 651 views
3

我正在将我的密钥保存为字节数组。在HBase Shell中,当我查看我的密钥时,我看到非十六进制值...我没有启用任何编码,我没有启用任何压缩。HBase Shell RowKey中的非十六进制字符是什么?

下面是一个示例...什么是VNQ?什么是BBW?我猜测有一些编码正在进行?

\xFB\xC6\xE8\x03\xF0VNQ\x8By\xF6\x89D\xC1\xBBW\x00\x00\x00\x00\x00\x00\x01\xF3\x00\x00\x00\x00\x00\x07\xA1\x1F 

回答

5

HBase的外壳采用一种叫做“二进制串”(十六进制逃逸)表示字节阵列的打印出的键/值(参见Bytes.toStringBinary method)。该方法基本上对每个字节执行两个操作之一:

  1. 如果字节值在范围内,则将其转换为可打印(ASCII)表示形式。
  2. 如果字节值不在ASCII范围内,则将其转换为\ xHH(其中'H'表示一个十六进制数字)。

这个想法是使用可打印的表示法。如果你的键/值都是可打印的字符,那么shell就不会打印出任何这些奇怪的\ xHH序列。

如果你喜欢十六进制表示相反,尝试在HBase的外壳下面:

> import org.apache.hadoop.hbase.util.Bytes 
> Bytes.toHex(Bytes.toBytesBinary("\xFB\xC6\xE8\x03\xF0VNQ")) 
> fbc6e803f0564e51 

您可以修改HBase的外壳红宝石包装使用toHex()方法,而不是toStringBinary()打印出的数据(或更好;如果您喜欢,可以给HBase贡献一个补丁以包含两个选项的标志;请参阅HBase developer guide)。

相关问题