2011-03-18 77 views
0

我試圖擴展HBase Put類時遇到問題。擴展HBase的問題Put

我有這樣

public class HBasePut extends Put { 
    //here i define my own adds because i have only string "keys" 
    //so i dont have to use Bytes.toBytes() every time and so on 
} 

一個代碼,但測試這些類時,這個代碼是OK:

Put p = new Put(Bytes.toBytes('row')); 
p.add(Bytes.toBytes('cf'), Bytes.toBytes('col'), Bytes.toBytes(1)); 
users.put(p); 

但試圖約70秒鐘後,這個人讓一個例外 - RetriesExhaustedWithDetailsException

HBasePut p = new HBasePut('row'); 
p.add('cf', 'col', 1); 
users.put(p); 

所以我試着迭代RetriesExh中的異常......它告訴m e有一個例外,但它是空的...
我在看Put,HTable和HConnection的代碼,但是我找不到任何依賴寫入HBase的類,所以我不知道爲什麼我的HBasePut不工作。

是否有可能以某種方式延長Put? 謝謝

回答

1

如果你看看你的regionserver日誌,你會看到一個異常,如「找不到類...... HBasePut」。所以,HBase顯然會將一個Put實例從客戶端傳輸到服務器,但服務器不知道您的子類並且無法處理它。

我建議不要繼承子類,而是建議編寫一個自定義的Util類,它提供了一個靜態的「添加」方法,將Put實例和字符串作爲參數並使用靜態導入導入此方法。

+0

是的,這是我的第二個想法如何做到這一點,但我希望能拓展,因爲我失去了「流體」模式這(utils)交互的方式。 $ put-> add('something') - > add('and other') - > ... 但是非常感謝 - 這就是我在最後做到的。 – 2011-03-28 20:32:45

0

正如zillion1說,只要使用一個靜態方法:

public static void add(Put put, String col, String qual, String data) 
{ 
    put.add(col.getBytes(), qual.getBytes(), data.getBytes()); 
}