2012-08-27 14 views
3

我目前正在調查數據被破壞的錯誤,並且我們不確定發生了哪個組件。我試圖從Hbase中讀取數值,但是由於編碼原因,它們沒有任何意義。我被告知它是'二進制編碼的十六進制'(不管是什麼意思)。 有誰知道如何解碼這些值?任何解決方案,將不勝感激;無論是我可以下載的一些實用程序還是一步一步的手動過程。以下是我的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

----正在取代數據類型的潛在揭示關於未發行的產品的信息的名稱。

回答

2

不知道這是否有幫助,但HBase不理解類型,並將所有內容都存儲爲一個字節序列。它很容易從十六進制編碼去實際字節值:

\x00\x00\x00\x01 

是字節序列:

0 0 0 1 

如果我猜的話,這些值都應該是多頭所以上述只會是1L。

您可以使用java API(特定的,org.apache.hadoop.hbase.util.Bytes類)將字節序列轉換爲java中的實際類型,但爲了使其具有任何意義,您需要知道它們被序列化的類型。另外,這裏假設無論寫入數據是用java編寫還是具有相同的字節數。

如果你知道ruby,你也可以使用字符串類的unpack()方法來理解那些字節序列,但是你仍然需要知道類型/字節序以便這樣做,並且如果它不是原語,它可能不會工作。

+1

這是一個開始,但我仍然可以使用一點澄清。這些價值實際上是很長的,所以第一個值就是1?你說這是一個字節序列,但如果它是4個不同的字節,例如'4 3 3 1',那麼它是如何轉換爲實際整數?還有一些這些值有非十六進制字符,如U或Q如何轉換爲字節? – evanmcdonnal

+0

我認爲你真的需要了解什麼是寫他們知道如何正確解釋他們 –

+0

Cftarnas的答案[這裏](http://stackoverflow.com/questions/10586368/hbase-shell-value-is-cutted)幫助澄清這一點。 – schoon