2017-02-20 46 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. Преобразуйте его в \ xHH (где «H» представляет шестнадцатеричную цифру), если значение байта не находится в диапазоне ASCII.

Идея заключается в использовании печатного представления. Если ваши ключи/значения были все печатаемыми символами, то оболочка не распечатывала ни одну из этих странных \ xHH последовательностей.

Если вы предпочитаете представление Hex вместо этого, попробуйте следующее 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).

 Смежные вопросы

  • Нет связанных вопросов^_^