HBase Shell RowKey 中的非十六进制字符是什么?

What are the non-hex characters in HBase Shell RowKey?

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

这是一个示例...什么是 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

HBase shell 使用字节数组的 "binary string"(转义十六进制)表示来打印出 keys/values(参见 Bytes.toStringBinary method)。此方法基本上对每个字节执行以下两项操作之一:

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

想法是使用可打印的表示。如果您的 keys/values 都是可打印字符,那么 shell 将不会打印出任何奇怪的 \xHH 序列。

如果您更喜欢十六进制表示法,请在 HBase shell 中尝试以下操作:

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

您可以修改 hbase shell ruby 包装器以使用 toHex() 方法而不是 toStringBinary() 来打印数据(或更好;您可以为 HBase 贡献一个补丁以包含如果您愿意,可以为这两种选择打上旗帜;请参阅 HBase developer guide).