3

現在、データが破損しているバグを調査していますが、これがどのコンポーネントで発生しているかは不明です。Hbase から値を読み取ろうとしていますが、エンコーディングが原因で意味がわかりません。「バイナリエンコードされた16進数」であると言われました(それが何を意味するにせよ)。これらの値をデコードする方法を知っている人はいますか? 任意の解決策をいただければ幸いです。ダウンロードできるユーティリティであろうと、段階的な手動プロセスであろうと。以下は、私の 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 は型を認識せず、基本的にすべてを一連のバイトとして格納します。16 進エンコーディングから実際のバイト値に移行するのは非常に簡単です。

\x00\x00\x00\x01

はバイト シーケンスです。

0 0 0 1

推測する必要がある場合、これらの値は long であるはずなので、上記は 1L になります。

Java API (具体的には org.apache.hadoop.hbase.util.Bytes クラス) を使用して、バイト シーケンスを Java の実際の型に変換できますが、それを理解するには、その型を知る必要があります。から連載されました。また、これは、データを書き込んでいるものは何でもJavaでも書かれている、および/または同じエンディアンを持っていることを前提としています。

ルビーを知っている場合は、これらのバイトシーケンスを理解する文字列クラスの unpack() メソッドを使用することもできますが、そのためには型/エンディアンを知る必要があり、プリミティブでない場合はおそらく勝ちました動作しません。

于 2012-08-30T00:02:04.907 に答える