【问题标题】:Making sense of encoded hbase values理解编码的 hbase 值
【发布时间】:2012-08-27 23:17:11
【问题描述】:

我目前正在调查数据损坏的错误,我们不确定这是在哪个组件中发生的。我正在尝试从 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

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

【问题讨论】:

    标签: binary hex hbase


    【解决方案1】:

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

    \x00\x00\x00\x01
    

    是字节序列:

    0 0 0 1
    

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

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

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

    【讨论】:

    • 这是一个开始,但我仍然可以做一点澄清。这些值实际上是多头,所以第一个只是 1?你说它是一个字节序列,但如果它是 4 个不同的字节,例如4 3 3 1,它如何转化为一个实际的整数?此外,其中一些值具有非十六进制字符,如 U 或 Q 这些如何转换为字节?
    • 我认为你真的需要了解它们在写什么才能知道如何正确解释它们
    • Cftarnas 的回答 here 有助于澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2016-06-17
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多