2011-03-18 139 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()); 
}