2017-02-20 650 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)。

相關問題