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

时间:2017-02-20 19:43:55

标签: hbase hbase-shell

我将我的密钥保存为字节数组。在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

1 个答案:

答案 0 :(得分:11)

HBase shell使用称为"二进制字符串"字节数组的(转义十六进制)表示,用于打印键/值(参见Bytes.toStringBinary method)。这个方法基本上对每个字节做了两件事之一:

  1. 如果字节值在范围内,则将其转换为可打印(ASCII)表示。
  2. 如果字节值不在ASCII范围内,则将其转换为\ xHH(其中' H'表示十六进制数字)。
  3. 这个想法是使用可打印的表示法。如果你的键/值都是可打印的字符,那么shell就不会打印出任何奇怪的\ xHH序列。

    如果您更喜欢Hex表示,请在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)。