3

我目前正在调查一个数据被损坏的错误,我们不确定这是在哪个组件中发生的。我正在尝试从 Hbase 中读取值,但由于编码而无法理解它们。有人告诉我它是“二进制编码的十六进制”(无论这意味着什么)。有谁知道如何解码这些值?任何解决方案将不胜感激;无论是我可以下载的一些实用程序还是一步一步的手动过程。以下是我的 hbase 扫描中的一些示例行。

column=m:----_daily_count, timestamp=1345766400000, value=\x00\x00\x00\x01 column=a:utc_offset, timestamp=1346025600000, value=\xFF\xFF\x9D\x90
column=m:----_daily_count, timestamp=1344816000000, value=\x00\x00\x00\x03

---- 正在替换可能泄露未发布产品信息的数据类型的名称。

4

1 回答 1

2

不确定这是否有帮助,但 HBase 不理解类型,并且基本上将所有内容存储为字节序列。从十六进制编码到实际字节值很容易:

\x00\x00\x00\x01

是字节序列:

0 0 0 1

如果我不得不猜测,这些值应该是多头的,所以上面的只是 1L。

您可以使用 java API(特别是 org.apache.hadoop.hbase.util.Bytes 类)将字节序列转换为 java 中的实际类型,但要理解它,您需要知道他们被序列化了。此外,这假设写入数据的任何内容也是用 java 编写的和/或具有相同的字节序。

如果您了解 ruby​​,您还可以使用字符串类的 unpack() 方法,该方法可以理解这些字节序列,但您仍然需要知道类型/字节顺序才能这样做,如果它不是原语,它可能会赢不行。

于 2012-08-30T00:02:04.907 回答